java - 如何使用 SpannableString 更改行间距?

标签 java android kotlin spannablestring

对于一个项目,我必须在 EditText 中编辑带有粗体、斜体、大小等属性的文本。因此,我制作了一个 CustomSpan,它实现了 StyleSpan,其中包含我需要的所有属性。下面是我的代码:

class CustomSpan(
    val bold: Boolean = false,
    val italic: Boolean = false,
    val size: Int = 14,
    val color: Int = Color.BLACK,
    val letterSpacing: Float = 0f
): StyleSpan(when {
        bold && italic -> Typeface.BOLD_ITALIC
        bold -> Typeface.BOLD
        italic -> Typeface.ITALIC
        else -> Typeface.NORMAL
    }) {

    override fun updateDrawState(ds: TextPaint) {
        super.updateDrawState(ds)

        ds.color = color
        ds.textSize = size.toFloat()
        ds.letterSpacing = letterSpacing
    }

    override fun updateMeasureState(paint: TextPaint) {
        super.updateMeasureState(paint)

        paint.color = color
        paint.textSize = size.toFloat()
        paint.letterSpacing = letterSpacing
    }

    fun copy() : CustomSpan = CustomSpan(bold, italic, size, color, font, letterSpacing)

    fun copyWith(bold: Boolean? = null,
                 italic: Boolean? = null,
                 size: Int? = null,
                 color: Int? = null,
                 letterSpacing: Float? = null) : CustomSpan {

        return CustomSpan(
            bold = bold ?: this.bold,
            italic = italic ?: this.italic,
            size = size ?: this.size,
            color = color ?: this.color,
            letterSpacing = letterSpacing ?: this.letterSpacing
        )
    }
}

但是,我还需要更改 EditText 中的行间距。为此,我想更改底部或填充,但我不知道该怎么做。你有什么想法吗?

感谢您的帮助,祝您有美好的一天!

最佳答案

也许你可以通过baselineShift来实现这一点,你可以尝试这样的事情:

override fun updateDrawState(ds: TextPaint) {
    super.updateDrawState(ds)

    ds.color = color
    ds.textSize = size.toFloat()
    ds.letterSpacing = letterSpacing

    // here you might want to play with a specific value or ds.ascent/ds.descent..
    ds.baselineShift += 12
}

关于java - 如何使用 SpannableString 更改行间距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60213035/

相关文章:

Android:来自音频的外部硬件中断

android - 如何在 Kotlin 中自定义 Android Studio 的导入顺序以忽略它们是否是 "static"导入?

java - 使用 java lambda 调用 kotlin 函数时,Kotlin 无法访问 kotlin.jvm.functions.Function1

java - 如何直接写入 JTextArea?

android - java.lang.SecurityException : Permission Denial: 错误

java - 检查基元数组是否包含另一个数组中的所有基元的最佳方法

android - 修改现有主题

dictionary - 在给定 Kotlin 中的键列表的情况下切片 map

java - 错误 : Exception in thread "main" java. lang.NullPointerException

java - 如何重现可能不是两个参数接口(interface)的子类型的通用接口(interface)类型变量的 java 编译/运行时错误?