URLSpan in SpannableString

I follow this example when using SpannableString: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/text/Link.html

I am trying to create a string named R.string.text1 following R.string.text2, but R.string.text2 (has 10 characters) in URL format:

SpannableString ss = new SpannableString(getString(R.string.text1));
ss.setSpan(new URLSpan(getString(R.string.text2)), 0, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

But I get

  • I do not see the string R.string.text2 at all
  • and only the first 10 characters are in URL format

How can I fix my problem?

+6
source share
4 answers

This is a more general answer to show only a basic working example . URLSpan

enter image description here

// 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 
+5
source

Can i fix you?

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

pretty late, but at least done for others ^^

:

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;
+2

..

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

In kotlin you can use like this method

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

All Articles