Est-il possible de définir plusieurs styles pour différents morceaux de texte dans un TextView ?
Par exemple, je configure le texte comme suit :
tv.setText(line1 + "\n" + line2 + "\n" + word1 + "\t" + word2 + "\t" + word3);
Est-il possible d'avoir un style différent pour chaque élément de texte ? Par exemple, ligne1 en gras, mot1 en italique, etc.
Le guide du développeur Tâches courantes et comment les effectuer dans Android comprend Sélectionner, mettre en évidence ou styliser des parties de texte :
// Get our EditText object. EditText vw = (EditText)findViewById(R.id.text); // Set the EditText's text. vw.setText("Italic, highlighted, bold."); // If this were just a TextView, we could do: // vw.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE); // to force it to use Spannable storage so styles can be attached. // Or we could specify that in the XML. // Get the EditText's internal text storage Spannable str = vw.getText(); // Create our span sections, and assign a format to each. str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Mais cela utilise des numéros de position explicites dans le texte. Existe-t-il un moyen plus propre de le faire ?
6 votes
If the TextView string is static, you can just add html <b>, <i>, and <u> tags into the strings resource file and they will automatically be applied. E.g. <TextView Android:text="@string/test" /> where @string/test is set to <string><b>bold</b>, <i>italic</i></string>
2 votes
+1 @greg7gkb ! Le mot clé est "statique". Je m'arrachais les cheveux en me demandant pourquoi certaines de mes chaînes de caractères fonctionnaient avec <b>et d'autres pas. Celles qui ne fonctionnaient pas contenaient des variables.