Есть ли способ изменить цвет подстроки программно в Android? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть строковый ресурс

<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 голосов
/ 19 апреля 2019

Да, есть другой способ. Отформатируйте строку с помощью свойства font-color html, а затем передайте его методу 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));
0 голосов
/ 19 апреля 2019

Ваш код в порядке, вам не хватает только начала и конца и цвета:

spannableString.setSpan(new ForegroundColorSpan(Color.GREEN), 130, 147, 0);
0 голосов
/ 19 апреля 2019

Попробуйте следующим образом:

<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

...