Dynamiquement l'Affichage de Texte avec TextView (Android)
Fondamentalement, ce que je veux faire dans mon application Android, est d'utiliser une TextView pour afficher deux morceaux de texte à la fois. Donc, dans le code, je veux être en mesure de faire quelque chose comme ceci:
LinearLayout ll = new LinearLayout(this);
TextView text = new TextView(this);
text.setTextColor(0xFF000000);
text.setGravity(Gravity.CENTER_HORIZONTAL);
text.setTextSize(20f);
text.setText("Text1");
text.setTextSize(14f);
text.setColor(0xFF0000FF);
text.setText("\nText2");
ll.addView(text);
Pour clarifier, j'essaie d'afficher un noir "Texte1" et un bleu "Texte2" à la fois en utilisant seulement un seul TextView. Évidemment, cela ne fonctionne pas à l'aide du code ci-dessus. J'ai réfléchi à l'aide d'un deuxième TextView mais ça semble être un gaspillage d'efforts et de mémoire pour moi. Je suis sûr que les esprits brillants de ici pouvez venir avec la solution la meilleure pour cette.
Merci beaucoup d'avance pour votre temps et votre aide.
Vous devez vous connecter pour publier un commentaire.
Il y a deux options pour vous.
Est
Spannable
et d'autres est
fromHtml (String source)
De sorte que vous pouvez obtenir votre sortie désirée.
Je pense qu'avec la version actuelle du code, vous pouvez voir que le dernier texte (Texte2).
Si vous voulez avoir de multiples regard et la sensation de deux textes, je vous suggère d'utiliser 2 séparés TextViews. Il serait ajouter plus de flexibilité.
Si vous n'allez pas changer ce code de l'INTERFACE utilisateur plus tard, alors vous pouvez envisager Html.toHtml() dans setText() de l'appel.
Il semble que le problème est avec:
Vous essayez d'ajouter une vue à un LinearLayout, mais la mise en page n'existe pas (dans l'activité en cours). Vous devez ajouter le TextView pour une Mise en page définie dans la .xml que vous utilisez. Supposons que vous avez un LinearLayout avec l'id "linearlayout01" dans le fichier xml "activity1.xml", vous feriez quelque chose comme:
Une fois un
Vue
est ajouté à unViewGroup
de quiLinearLayout
est un descendant vous n'avez pas besoin de readd à mettre à jour son affichage. Si vous préforme toute modification sur une vue qui l'oblige à modifier son affichage, il se chargera de toutes les notifications requises à propos tenus redessine ou relayouts en appelantVoir#invalider
etVoir#requestLayout
le cas échéant.En outre, parce que tous les changements de l'INTERFACE sont traitées sur le même fil, vous n'avez pas besoin de vous soucier d'appeler plusieurs méthodes de mise à jour de l'INTERFACE utilisateur. C'est à cause de deux raisons, tout d'abord, l'exécution de la redessine ne se produisent pas jusqu'à ce que votre code est terminé, deuxième, android a optimisations construit en combinant de multiples invalider les appels en un seul.
Alors, la seule chose que vous avez à vous soucier est l'obtention d'une référence appropriée à votre
TextView
de l'instance et ensuite vous pouvez appeler toutes les méthodes que vous devez faire afficher ce que vous souhaitez.Depuis que vous êtes à la création de votre
View
s manuellement et non à partir de xml, vous devez ajouter la racine de votreViewGroup
à laActivité
en appelantActivité#setContentView
.Edit:
Alors vous allez avoir besoin d'apprendre au sujet de
SpannableString
etSpannableStringBuilder
. Il y a quelques très brève documentation ici: La sélection, la mise en évidence, ou de Style Portions de Textequand prévoyez-vous de mettre à jour le
textview
? Si il est sur le clic d'un bouton, puis obtenir une référence à l'textview
et dans le onClickListener() mise à jour le texte, la couleur, etc tout ce que vous voulez faire.Après avoir vu vos autres commentaires, je pense que SpannableString est ce que vous êtes à la recherche pour
Html.fromHtml(String)