Si vous voulez changer l'état de toutes les instances d'un String
dans un texte TextView
spécifique (insensible à la casse), vous pouvez utiliser StringBuilder
s et SpannableString
comme ceci:
StringBuilder textBuilder = new StringBuilder(myTextView.getText().toString());
StringBuilder searchedTextBuilder = new StringBuilder((mySearchedString));
SpannableString spannableString = new SpannableString(myTextView.getText().toString());
int counter = 0;
int index = 0;
for (int i = 0;i < textBuilder.length() - mySearchedString.length() - 1;i++)
{
counter = 0;
if (Character.toLowerCase(textBuilder.charAt(i)) == Character.toLowerCase(searchedTextBuilder.charAt(index)))
{
counter++;
index++;
for (int j = 1,z = i + 1;j < mySearchedString.length() - 1;j++,z++)
{
if (Character.toLowerCase(textBuilder .charAt(z)) == Character.toLowerCase(searchedTextBuilder .charAt(index)))
{
counter++;
index++;
}
else
{
index++;
if (index % mySearchedString.length() == 0)
{
index = 0;
}
break;
}
}
if (counter == mySearchedString.length() - 1) // A match
{
spannableString.setSpan(new ForegroundColorSpan(Color.RED), i,
i + mySearchedString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Do the change you want(In this case changing the fore ground color to red)
index = 0;
continue;
}
else
{
index = 0;
continue;
}
}
}
myTextView.setText(spannableString);
}
- Stockez le texte entier
TextView
à l'intérieur d'un StringBuilder
.
- Stockez la chaîne recherchée dans un
StringBuilder
.
- le magasin wholre texte
TextView
dans un SpannableString
- Faire une simple opération de trouver toutes les instances
String
dans le texte et les TextView
changer lorsqu'il est atteint.
- Définissez la valeur de texte du
TextView
sur SpannableString
.
double possible de [? Est-il possible d'avoir plusieurs styles dans un TextView] (http://stackoverflow.com/questions/1529068/is-it- possible-avoir-plusieurs-styles-dans-un-textview) – blahdiblah
http://stackoverflow.com/questions/9754076/which-html-tags-are-supported-by-android-textview/35271588#35271588 –