多款式富文本的简练完成

appendableStyleScope 答应你快速构建多种款式文字。

Android UI开发之多样式富文本的简洁实现

特性

  • 支撑关于同一个字符串设置多种款式。
  • 支撑文字和图片。
  • 供给默认款式。
  • 采用 DSL 保证更明晰的款式效果规模

快速开端

下面的示例为你展现了怎么创立一条链接文本。

appendableStyleScope(getBinding().tv) {
    withStyle(AppendableStyle(url = "https://www.baidu.com/")) {
        append("这是一个链接")
    }
}

下面的示例为你展现了怎么创立一条图片文本。

appendableStyleScope(getBinding().tv) {
    withImage(ImageSpan(this, R.mipmap.ic_launcher))
}

拼接字符串

下面的示例为你展现怎么创立一条杂乱的富文本字符串。

appendableStyleScope(getBinding().tv) {
    withStyle(AppendableStyle(QuoteSpan(ColorUtils.colorHex2Int("#27ae60"), 10, 30))) {
        withStyle(AppendableStyle(fontSize = 20F.SP.toInt())) {
            appendLine("什么是 Android?")
        }
        append("一个推翻移动设备功能的平台,你可以访问")
        withStyle(AppendableStyle("https://www.android.com/intl/zh-CN_cn/what-is-android/")) {
            append("链接")
        }
        appendLine("来了解更多。")
        append(
            "从只能让设备运行,到让生活更轻松,都是Android在背面供给强力支撑。" +
                    "有了Android, 才能让GPS避开拥堵,用手表发短信,让Google助理答复问题。" +
                    "现在有 25 亿部活跃设备搭载了 Android 操作系统。Android 能够为各种设备" +
                    "供给强力支撑,从 5G 手机到炫酷的平板电脑,不乏其人。"
        )
        withStyle(AppendableStyle(ScriptMode.SUPERSCRIPT)) { append("[1]") }
        append("\n")
        withImage(ImageSpan(this@DateActivity, R.drawable.android_logo))
    }
}
Android UI开发之多样式富文本的简洁实现

通用款式

通过指定 AppendableStyle 内的 backColor 特点,可认为字符串设置背景色。现在 AppendableStyle 答应你指定以下特点:

  • foreColor : 文字色彩。
  • backColor : 文字背景色。
  • fontStyle : 文字风格,现在支撑粗体、斜体或许正常。
  • fontFamily : 文字字体。
  • fontSize : 文字大小。
  • fontAlign : 文字对齐方法。
  • proportion : 文字扩大份额,例如假如扩大 50% ,则该特点设置为 1.5f 。
  • xProportion : 值 > 1.0 会将文本拉伸得更宽。值 < 1.0 会将文本拉伸得更窄。
appendableStyleScope(getBinding().tv) {
    withStyle(AppendableStyle(url = "https://www.baidu.com/", backColor = R.color.lightslategray)
    ) {
        append("这是一个链接")
    }
}
Android UI开发之多样式富文本的简洁实现

特别款式

除了通用款式,你也可认为文字指定以下仅有的特别款式,现在支撑:

链接文字

appendableStyleScope(getBinding().tv) {
    withStyle(AppendableStyle(url = "https://www.baidu.com/")) {
        append("这是一个链接")
    }
}
Android UI开发之多样式富文本的简洁实现

首行缩进

appendableStyleScope(getBinding().tv) {
    withStyle(AppendableStyle(linesIndent = LeadingMarginSpan.Standard(100, 0))) {
        append("这是一段带首行缩进的文本哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。")
    }
}
Android UI开发之多样式富文本的简洁实现

携带子弹点

appendableStyleScope(getBinding().tv) {
    withStyle(
        AppendableStyle(bulletSpan = BulletSpan(10, ColorUtils.colorHex2Int("#d63031"), 10))
    ) {
        append("这是一段带子弹点的文字。")
    }
}
Android UI开发之多样式富文本的简洁实现

引证文字

appendableStyleScope(getBinding().tv) {
    withStyle(
        AppendableStyle(quoteSpan = QuoteSpan(ColorUtils.colorHex2Int("#f0932b"), 10, 10))
    ) {
        append("这是一段引证文字。")
    }
}
Android UI开发之多样式富文本的简洁实现

删除线或许下划线

appendableStyleScope(getBinding().tv) {
    withStyle(
        AppendableStyle(strikeMode = StrikeMode.STRIKETHROUGH)
    ) {
        append("这是一段带删除线的文字。")
    }
    withStyle(
        AppendableStyle(strikeMode = StrikeMode.UNDERLINE)
    ) {
        append("这是一段带下划线的文字。")
    }
}
Android UI开发之多样式富文本的简洁实现

上标或许下标

appendableStyleScope(getBinding().tv) {
    withStyle { append("这是一段带上标的文字。") }
    withStyle(AppendableStyle(scriptMode = ScriptMode.SUPERSCRIPT)) {
        append("[1]")
    }
}
Android UI开发之多样式富文本的简洁实现

规模含糊

appendableStyleScope(getBinding().tv) {
    withStyle(
        AppendableStyle(blurRadius = 5f, blur = BlurMaskFilter.Blur.NORMAL)
    ) {
        append("这是一段带含糊的文字。")
    }
}
Android UI开发之多样式富文本的简洁实现

可点击文字

该项不供给示例。

源代码

你可以点击 AppendableStyleString 来检查源码,这个仓库也包含了我封装的其他东西,假如你喜爱的话,还期望能够star,fork和提出issue。