SpannableString 在 Word 的顶部和底部有空格

Posted

技术标签:

【中文标题】SpannableString 在 Word 的顶部和底部有空格【英文标题】:SpannableString with space on top and bottom of just Word betwenn anothers 【发布时间】:2021-10-05 13:03:18 【问题描述】:

大家好?所以我有一个 TextView 并且我有一个有价值的词,我必须只在值上设置一些样式,比如

问题是,我需要在 textview 中这个值的顶部和底部放置空间,以便它与 String 的其余部分分开一点。

我需要让它这样

我现在的代码是这样的

private fun configTitleSpan(
    title: String,
    textToSpanValue: String
): SpannableString 
    val startIndex = title.indexOf(textToSpanValue)
    val endIndex = title.indexOf(textToSpanValue).plus(textToSpanValue.length)
    if (startIndex <= 0 || endIndex <= 0) return title.toSpan()

    return SpannableString(title)
        .apply 
            setSpan(
                RelativeSizeSpan(SIZE_SPAN),
                startIndex,
                endIndex,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
            )
        
        .apply 
            setSpan(
                TypefaceSpan(DEFAULT_FONT_STYLE),
                startIndex,
                endIndex,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
            )
        
        .apply 
            setSpan(
                MarginTopBottomSpan(HEIGHT_SIZE_SPAN, HEIGHT_SIZE_SPAN),
                startIndex,
                endIndex,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
            )
        

我可以把值格式化,但是我需要的顶部和底部的空间我不能放。

【问题讨论】:

【参考方案1】:

我可以按照这个答案解决它,我做了一些调整并且工作正常。 Using LineHeightSpan

private class MarginTopBottomSpan(
    private val topMargin: Int,
    private val bottomMargin: Int
) : LineHeightSpan 

    override fun chooseHeight(
        text: CharSequence,
        start: Int,
        end: Int,
        spanstartv: Int,
        v: Int,
        fm: FontMetricsInt
    ) 
        fm.bottom += bottomMargin
        fm.descent += bottomMargin
        fm.top += topMargin * VALUE_NEGATIVE
        fm.ascent += topMargin * VALUE_NEGATIVE
    

    companion object 

        private const val VALUE_NEGATIVE = -1
    

【讨论】:

以上是关于SpannableString 在 Word 的顶部和底部有空格的主要内容,如果未能解决你的问题,请参考以下文章

自动适应 TextView 和 spannableString

记录工作点滴之toolbar的menu菜单改变字体颜色

Android开发之SpannableString具体解释

SpannableString与SpannableStringBuilder使用

SpannableString 可以序列化吗?

从 SpannableStringBuilder 获取 SpannableString 的最佳方法