基於Android的富文字展現開發實踐--AndroidCoreText
阿新 • • 發佈:2019-01-28
目前主流的基於Android富文字開發方式思路如下:
- 基於TextView圖文混排
使用方式:
TextView textView = new TextView(context);
textView.setText(Html.fromHtml(“xxxxxx”));
優點:簡單、易用、學習成本低,直接輸入html即可
缺點:支援的樣式不夠靈活,有些效果實現不了。例如圖片的環繞效果
- 基於佈局的實現方式:
通過實現多種佈局或者模板的方式實現。
優點:簡單直接
缺點:複雜樣式或者多種樣式的情況開發效率低下,系統資源佔用較多、卡頓,並且不夠靈活。
- 基於AndroidCoreText的圖文混排方式
AndroidTextView是一個致力於開發出一種靈活的圖文混排開發框架,核心在於佔坑和換行。通過佔坑的方式可以支援例如圖片,視訊,音訊等多種圖文混排樣式,目前通過佔坑和換行可以支援環繞和單行效果。
AndroidCoreText目前支援兩種使用方式:
- AttributedString
示例如下:
AttributedString string = new AttributedString("這是一個最好的時代,這是一個最壞的時代;這是一個智慧的年代,這是一個愚蠢的年代;" + "這是一個光明的季節,這是一個黑暗的季節;這是希望之春,這是失望之冬;人們面前應有盡有,人們面前一無所有;人們正踏向天堂之路,人們正走向地獄之門。"); string.replaceBlock(0, 1, CYTextBlock.class).setTextSize(50).setTextColor(Color.RED) .setTypeFace(Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD_ITALIC)); string.replaceBlock(30, 31, CYImageBlock.class).setResId(this, R.drawable.baidu) .setAlignStyle(CYPlaceHolderBlock.AlignStyle.Style_Round); CYView view = new CYView(this); view.setLayout(new CYHorizontalLayout()); view.setBlocks(string.buildBlocks()); view.setPadding(20, 20, 20, 20);
- 自定義Block
示例如下:
List<CYBlock> blocks = new ArrayList<CYBlock>(); blocks.add(new CYImageBlock("").setResId(this, R.drawable.car).setAlignStyle(CYPlaceHolderBlock.AlignStyle.Style_Round)); blocks.add(new CYTextBlock("這").setTextSize(50).setTextColor(Color.RED)); blocks.add(new CYTextBlock("是一個最好的時代,這是一個最壞的時代;這是一個智慧的年代,這是一個愚蠢的年代;" + "這是一個光明的季節,這是一個黑暗的季節;這是希望之春,這是失望之冬;人們面前應有盡有,人們面前一無所有;人們正踏向天堂之路,人們正走向地獄之門。").setTextSize(30)); blocks.add(new CYTextBlock("這是一個最好的時代,這是一個最壞的時代;這是一個智慧的年代,這是一個愚蠢的年代;" + "這是一個光明的季節,這是一個黑暗的季節;這是希望之春,這是失望之冬;人們面前應有盡有,人們面前一無所有;人們正踏向天堂之路,人們正走向地獄之門。").setTextSize(30)); blocks.add(new CYBreakLineBlock("")); blocks.add(new CYImageBlock("").setResId(this, R.drawable.baidu).setAlignStyle(CYPlaceHolderBlock.AlignStyle.Style_Round)); CYView view = new CYView(this); view.setLayout(new CYHorizontalLayout()); view.setBlocks(blocks); view.setPadding(20, 20, 20, 20);
效果如下:
GitHub地址:https://github.com/yangzc/AndroidCoreText