TextLayoutBuilder

在 Android 中轻松实现文字布局

TextLayoutBuilder 使用和 builder 模式来配置创建 Layout 所需的参数。这个 Builder 类和 TextView 的很相似。调用 build()TextLayoutBuilder 即可根据设定的参数创建一个文本 Layout

  • 轻松创建文字布局。
  • 相似风格的布局,可重用 builder。
  • 可缓存常用文字布局。
  • FreeType 缓存预热。
Layout layout = new TextLayoutBuilder()
    .setTextAppearance(context, resId)
    .setText("TextLayoutBuilder makes life easy")
    .setWidth(400 /*, MEASURE_MODE_EXACTLY */)
    .build();

特性

Builder

TextLayoutBuilder 使用 builder 模式配置创建 Layout 所需的参数,设置 StaticLayout 参数的日子一动不复返了。

缓存

调用 build(),对于一样的参数,将会返回同一个 Layout,对于通用 / 常用的文字布局,这减少了重复调用的消耗。

FreeType 预热

对于 4.0+ 设备, TextLayoutBuilder 可预热 FreeType 字体的缓存。TextLayoutBuilder 在一个后台线程将这些图形绘制到一张图片上,这样可预热图片减少之后的渲染时间。

引入

  • build.gradle:
    compile 'com.facebook.fbui.textlayoutbuilder:textlayoutbuilder:1.0.0'
  • Maven:
    <dependency>
        <groupId>com.facebook.fbui.textlayoutbuilder</groupId>
        <artifactId>textlayoutbuilder</artifactId>
        <version>1.0.0</version>
        <typen>aar</type>
    </dependency>

使用

  1. 通过 TextLayoutBuilder 设置参数:
    TextLayoutBuilder builder = new TextLayoutBuilder()
        .setTextAppearance(context, resId)
        .setText("TextLayoutBuilder makes life easy")
        .setWidth(400);
  2. 调用 build() 得到一个 Layout
    Layout layout = builder.build();
  3. 在你的代码中使用 Layout
    layout.draw(canvas);

Additional Usage

  1. 常用文字布局缓存, 设置 TextLayoutBuilder
    mTextLayoutBuilder.setShouldCacheLayout(true);
  2. 对于大段文字,字体图形的预热会带来显著的性能提升,打开预热,并给 TextLayoutBuilder 传入一个 GlyphWarmer
    mTextLayoutBuilder
        .setShouldWarmText(true)
        .setGlyphWarmer(new GlyphWarmerImpl());
  3. TextLayoutBuilder 指定一个 XML 文件,可在这个 XML 文件中定义好样式:
    ResourceTextLayoutHelper.updateFromStyleResource(
        mTextLayoutBuilder,
        mContext,
        resId);