在 kotlin 中更改子字符串的颜色

change color in substring in kotlin

我想用不同的颜色制作 "show more",但是在 kotlin 中使用 spannable 无法正常工作。 请帮忙

                val mSpannableString = SpannableString("show more")
                val mBlue = ForegroundColorSpan(Color.BLUE)
                mSpannableString.setSpan(mBlue,2,7,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

                holder.MORE.text = "READ MORE"
                if (Expert_answer.length>=300) {

                    holder.description.text = Expert_answer.substring(0,300)+"..."+mSpannableString
                }else{
                    holder.description.text = Expert_answer
                }

我已经这样做了,所以我可以在这里帮助你。

   val txtShow ="show"
   val txtMore ="More"
   val spannable = SpannableString(txtShow) // String for which you want to change the color
   spannable.setSpan(ForegroundColorSpan(Color.RED), 0, txtShow.length, 
   Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
   txtMessage.text = TextUtils.concat(txtShow,txtMore)

如果仍然需要任何帮助或stuck.Happy编码,请告诉我!!!

下面的函数会将 input 子字符串分成 300 个字符(如果超过 300 个字符),将 "Show more" 附加到它的末尾并将值设置为 holder.description.text

private fun setShowMoreIfNeeded(input: String) {
    val maxLenthOfStingShown = 300
    holder.description.text = if (input.length > maxLenthOfStingShown) {
        SpannableStringBuilder()
            .append(input.substring(0, maxLenthOfStingShown))
            .color(Color.BLUE) {append("Show more")}
    } else {
        input
    }
}

您还可以为跨度创建自定义实现,如下所示。

 val spannable = SpannableStringBuilder(“Text is spantastic!”)
spannable.setSpan(
     ForegroundColorSpan(Color.RED), 
     8, 12, 
     Spannable.SPAN_EXCLUSIVE_INCLUSIVE)

这里以你为例

 val showMore = "show more"
        val Expert_answer =
            "sample text  sample text sample text sample text sample text sample text sample text sample text "

        val Expert_answer =Expert_answer.substring(0, 30) + "..." + showmore
        val mSpannableString = SpannableStringBuilder(Expert_answer)

        val mBlue = ForegroundColorSpan(Color.BLUE)
        mSpannableString.setSpan(mBlue, 33, 42, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

        abcTitle.text = mSpannableString

编码愉快!!!