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