1. 程式人生 > >基於Android的富文字展現開發實踐--AndroidCoreText

基於Android的富文字展現開發實踐--AndroidCoreText

目前主流的基於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