0

我不知道我在 SO 上的问题是否有确切的解决方案,但我已经被困在这很长时间了,需要解开自己的障碍。

我有一个字符串“0000 111 222”,我需要设置一个链接。我设置它的代码是这样的。

spanManager.SpannableBuilder(text, link)
                .setColorSpan(ContextCompat.getColor(containerView.context, R.color.blue))
                    .setFontSpan(Typeface.BOLD)
                    .setClickableSpan(object : ClickableSpan() {
                    override fun onClick(textView: View) {
                        onClicked.value = action
                    }

                    override fun updateDrawState(ds: TextPaint) {
                        super.updateDrawState(ds)
                        ds.isUnderlineText = false
                    }
                })
                .build()

其中链接和文本都是“0000 111 222”。

现在

setClickableSpan(对象:ClickableSpan)

定义为

fun setClickableSpan(clickableSpan: ClickableSpan): SpannableBuilder {
    for (span in spans) {
        spannable.setSpan(clickableSpan, span.start, span.end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    }
    return this
}

变量集跨度SpannableBuilder(text, link)构造函数设置,如下所示

fun getSpans(fullText: String, subText: String): Set<Span> {
    val spans = HashSet<Span>()
    if (fullText.isEmpty() || subText.isEmpty()) {
        return spans
    }

    val ft = fullText.toLowerCase()
    val st = subText.trim().toLowerCase()

    val fullSplit = ft.split(" ")
    val subSplit = st.split(" ")

    var startPosition = 0
    for (full in fullSplit) {
        for (sub in subSplit) {
            val subTrim = sub.trim()
            if (!full.contains(subTrim)) {
                continue
            }
            val index = startPosition + full.indexOf(subTrim)
            val span = Span.create(index, index + subTrim.length)
            spans.add(span)
        }
        startPosition += full.length + 1
    }
    return spans
}

它基本上是跨空格分隔符拼接链接变量。所以函数

setClickableSpan(对象:ClickableSpan)

对于“0000 111 222”,跨度的大小为 3。setSpan 是一个函数定义的 SpannableStringInternal 库。

现在的问题是链接仅设置为“0000”而不是整个字符串。而颜色和字体跨度可以为整个字符串设置。我找不到这种行为的原因。如果有人能指出这里出了什么问题以及可能的解决方法,我将不胜感激。

4

0 回答 0