Android 跨度中的URLSpan

Android 跨度中的URLSpan,android,Android,我在使用SpannableString时遵循此示例: 我正在尝试创建一个字符串,其“R.string.text1”后跟R.string.text2,但R.string.text2(有10个字符)为URL格式: SpannableString ss = new SpannableString(getString(R.string.text1)); ss.setSpan(new URLSpan(getString(R.string.text2)), 0, 10, Spanned.SPAN_EXCL

我在使用
SpannableString
时遵循此示例:

我正在尝试创建一个字符串,其“R.string.text1”后跟R.string.text2,但R.string.text2(有10个字符)为URL格式:

SpannableString ss = new SpannableString(getString(R.string.text1));
ss.setSpan(new URLSpan(getString(R.string.text2)), 0, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
但我得到的是

  • 我根本看不到字符串R.string.text2
  • 只有前10个字符是URL格式的
  • 我如何解决我的问题?

    试试这个方法

    SpannableString ss = new SpannableString(getString(R.string.text1+""+R.string.text2));
    ss.setSpan(new URLSpan(getString(R.string.text2)), 0, getString(R.string.text2).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    
    我可以纠正你吗

    SpannableString ss = new SpannableString(getText(R.string.text1)+" "+getText(R.string.text2));
    ss.setSpan(new URLSpan(getString(R.string.text2)),
        getString(R.string.text1).length()+1,
        ss.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    
    很晚了,但至少对其他人来说是这样^^

    您也可以这样做:

    SpannableString ss1 = new SpannableString(getText(R.string.text1));
    // do what you want with ss1
    SpannableString ss2 = new SpannableString(getText(R.string.text2)); // the text visible
    ss2.setSpan(new URLSpan(getString(R.string.text2)), // this is the link itself
        0,
        ss2.length(), // link on entire text
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    
    CharSequence csSS = TextUtils.concat(ss1, ss2); // import android.text.TextUtils;
    

    这是一个更一般的答案,只显示了一个基本的工作示例


    在kotlin中,您可以这样使用

    fun SpannableStringBuilder.urlSpan(value: String): SpannableStringBuilder {
        val start = length
        this.append(value)
        val end = length
        this.setSpan(URLSpan(value), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
        return this
    }
    
    SpannableStringBuilder().urlSpan("www.google.com")
    

    我认为您必须从
    R.String.text1
    R.String.text2
    创建一个浓缩
    String
    Spannable
    。然后你调整你的URL范围。。
    fun SpannableStringBuilder.urlSpan(value: String): SpannableStringBuilder {
        val start = length
        this.append(value)
        val end = length
        this.setSpan(URLSpan(value), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
        return this
    }
    
    SpannableStringBuilder().urlSpan("www.google.com")