在Android中可以通过编程方式更改子字符串的颜色吗?

时间:2019-04-19 14:20:41

标签: android substring textview spannablestring android-color

我有一个字符串资源

<string name="redesign_password_pattern">Your password must contain the following:\n\t&#8226; A minimum of 8 characters\n\t&#8226; At least 1 capital letter\n\t&#8226; At least 1 small letter\n\t&#8226; At least 1 number\n\t&#8226; At least 1 of the following special characters: !, @, #, $, *</string>

当我将此字符串设置为TextView时,它看起来像image

如果用户输入的密码包含数字,我想从文本中更改 “至少1个数字” 的颜色,依此类推。

可以通过这种方式实现还是我需要遵循另一种方式?

到目前为止,我尝试了以下方法,但是我不知道如何为字符串资源编写起始值和结束值。

SpannableString spannableString =  new SpannableString(getString(R.string.redesign_password_pattern));
spannableString.setSpan(new ForegroundColorSpan(GREEN), 101, 130, 0);
pswFormat.setText(spannableString);

我不想写6个不同的TextViews。请帮助我找到一种方法。

谢谢。

3 个答案:

答案 0 :(得分:0)

尝试这种方式:

<string name="hello_world_test">Your password must contain the following:\n\t&#8226;
  <font color= "#F44336" name="1">A minimum of 8 characters\n\t&#8226;</font>
  <font color= "#008577" name="2">At least 1 capital letter\n\t&#8226; </font>
  <font color= "#CDDC39" name="3">At least 1 small letter\n\t&#8226;</font>
  <font color= "#008577" name="4">At least 1 number\n\t&#8226;</font>
  <font color="#9C27B0"  name="5">At least 1 of the following special characters: !, @, #, $, *</font></string>

tv.setText(Html.fromHtml(getResources().getString(R.string.hello_world_test)));

enter image description here

答案 1 :(得分:0)

是的,还有另一种方法。 使用html的font-color属性设置字符串的格式,然后将其传递给方法Html.fromHtml(text)

 String text = "<font color=#cc0029>A minimum of 8 characters</font> <font color=#ffcc00>At least 1 capital letter</font>";
 yourtextview.setText(Html.fromHtml(text));

答案 2 :(得分:0)

您的代码很好,您只缺少开始和结束以及颜色:

spannableString.setSpan(new ForegroundColorSpan(Color.GREEN), 130, 147, 0);