跳转至

Kotlin DSL

基于Kotlin优异的特性,使用DSL来构建一个Spannable。

核心方法

spannable{ }

创建一个Spannable DSL, 可以携带receiver。

// 不携带receiver
TextView.text = spannable {
    // 给bold text附加粗体及红色
    // span 方法可以混合多个Span效果
    "bold text".span {
        style(Typeface.BOLD)
        color(Color.RED)
    }

    // 添加不带样式的real text
    "real text".text()
}

// 携带receiver
TextView.text = "receiver".spannable {
    // 对receiver进行spanned操作
    style(Typeface.ITALIC)
    style(Typeface.BOLD)
    color(Color.BLACK)

    // 对text进行spanned操作并附加在receiver后面
    // span 方法可以混合多个Span效果
    "text".span {
        style(Typeface.BOLD)
        color(Color.RED)
    }
}

DSL内附加方法

以下方法为 spannable 内部的方法,只能在 spannable DSL 内部调用。

  • CharSequence?.text()

添加一段不附加效果的文本

TextView.text = spannable {
  "this is real text.".text()
}
  • CharSequence?.span{ }

添加一个需要混合span的DSL

TextView.text = spannable {
  "color text.".color(Color.RED)

  // span 方法可以混合多个Span效果
  "mix text.".span {
      style(Typeface.ITALIC and Typeface.BOLD)
      color(Color.RED)
  }
}
  • T?.newline(Int)

若不传入参数,则换一行。若传入参数,则换指定数量行。换行操作(也可自行使用 \n )。

若有receiver,就对receiver末尾添加 \n ,并返回receiver。

若无receiver,就直接对当前DSL内进行换行。

TextView.text = spannable {
  // 在文本末尾添加换行符,并返回文本
  "this is real text.".newline().color(Color.RED)

    // 在当前spannable dsl内,添加换行
    newline()
}

其它说明

👉 替换规则(DSL、链式通用): 替换规则

👉 常用Span(DSL、链式通用): 常用Span

👉 Kotlin DSL Sample: KotlinSample