Есть ли способ программно изменить цвет подстроки в Android?

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

<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, это выглядит так: Есть ли способ программно изменить цвет подстроки в Android?

Если пароль, введенный пользователем, содержит число, я хочу изменить цвет "Минимум 1 номер" из текста и так далее.

можно ли этого достичь или мне нужно следовать другим путем?

До сих пор я пробовал следующим образом, но я не знаю, как написать начальное и конечное значения для строкового ресурса.

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

И я не хочу писать 6 разных TextViews. Пожалуйста, помогите мне найти способ.

Заранее спасибо.

Возможно, это сможет вам помочь

Tamir Abutbul 19.04.2019 16:27
0
1
219
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте так:

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

Я хотел программно изменить цвет подстроки.

Praveen 19.04.2019 17:36

затем поместите строковый ресурс в локальную строковую переменную и вызовите его как tv.setText(Html.fromHtml(source);

Sultan Mahmud 19.04.2019 17:40

Сначала поймите проблему.

Praveen 19.04.2019 17:42

@Praveen Проверьте мой обновленный код. Я думаю, теперь вы можете понять.

Sultan Mahmud 19.04.2019 17:55

Да, есть еще один способ. Отформатируйте строку с помощью свойства 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));

Я хотел изменить цвет программно.

Praveen 19.04.2019 17:37
Ответ принят как подходящий

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

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

Другие вопросы по теме