SpannableString 中的 URLSpan

11

我正在使用这个例子,使用 SpannableString

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/text/Link.html

我正在尝试创建一个字符串,其中包含'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);

但我得到的是:

  1. 我根本看不到字符串R.string.text2
  2. 只有前10个字符是URL格式

我该如何解决这个问题?


我认为你需要从R.string.text1R.string.text2创建一个连接的字符串的Spannable。然后你可以调整你的URL Span。 - Kartik Domadiya
4个回答

22

这是一个更一般性的答案,仅展示了URLSpan的基本工作示例。

输入图片描述

// set up spanned string with url
SpannableString spannableString = new SpannableString("Click here for more.");
String url = "https://developer.android.com";
spannableString.setSpan(new URLSpan(url), 6, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

// set to textview
textView.setText(spannableString);
textView.setMovementMethod(LinkMovementMethod.getInstance()); // enable clicking on url span 

2
可以让我纠正一下吗?
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;

1

尝试这种方式...

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);

0
在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")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接