getString(int resId,Object ... formatArgs)方法中参数的样式文本

S F*_*itz 9 string android textview spannablestring

我有两个String资源:

<string name="give_us_feedback">Give us feedback at %1$s if you want to make the app even better!</string>  
<string name="email">info@mycompany.com</string>
Run Code Online (Sandbox Code Playgroud)

我想将电子邮件部分设置为蓝色和下划线,以指示用户可以单击它(整个TextView,而不仅仅是电子邮件文本).我知道使用SpannableString来为文本着色,但是当我通过getString(int resId,Object ... formatArgs)组合两个字符串时它似乎不起作用,可能是因为getString()将执行强制转换或.toString ()正在发送的对象上.这是不起作用的:

TextView emailTV = new TextView(this);
SpannableString email = new SpannableString(getString(R.string.email));
email.setSpan(new UnderlineSpan(), 0, email.length() - 1, 0);
email.setSpan(new ForegroundColorSpan(Color.BLUE), 0, email.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
String feedback = getString(R.string.give_us_feedback, email);
emailTV.setText(feedback);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Bla*_*elt 9

这有点棘手.转换回charsequence(String feedback = getString(R.string.give_us_feedback, email);)会消失Spannable.试试这种方式(你想检查你的字符串中的正确索引)

String emailString = getString(R.string.email);
String feedback = getString(R.string.give_us_feedback, emailString);
SpannableString email = new SpannableString(feedback);
int startIndex = feedBack.indexOf(emailString);
int endIndex = startIndex + emailString.length();
email.setSpan(new UnderlineSpan(), startIndex, endIndex, 0);
email.setSpan(new ForegroundColorSpan(Color.BLUE), startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
emailTV.setText(email);
Run Code Online (Sandbox Code Playgroud)