web-dev-qa-db-fra.com

comment avoir du texte en gras et normal dans la même vue de texte dans Android?

J'ai recherché sur Internet et essayé le code suivant mais cela ne fonctionne pas

SpannableString ss1 = new SpannableString("Health: ");
           ss1.setSpan(new Android.text.style.StyleSpan(Android.graphics.Typeface.BOLD), 0, ss1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            textview1.setText("\n"+ss1+strhealth+"\n\n");

je veux que la sortie soit comme ça Santé: bon

où strhealth = bon Mais ça sort Santé: bonne Quelle est l'erreur?

J'utilise Android studio 2.1.1

15
G.ONE
 String txt1="Health: ";
 SpannableString txtSpannable= new SpannableString(txt1);
 StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
 txtSpannable.setSpan(boldSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

 builder.append(txtSpannable);

 String txt2="good";
 builder.append(txt2);

 textview1.lblStatus.setText(builder, TextView.BufferType.SPANNABLE);
14
dindinii

Le moyen le plus simple est

textview1.setText(Html.fromHtml("<b>Health:</b> good"));

L'erreur dans votre code est d'utiliser la concaténation de chaînes ici: "\n"+ss1+strhealth+"\n\n" qui supprime tout le formatage car les composants sont considérés comme des chaînes normales.

7
Henry

Je suis un peu en retard pour répondre, mais j'ai créé une méthode pour une utilisation facile en utilisant la réponse déjà fournie ici.

    private void setSpanString(String string1, String string2, TextView textView) {
    SpannableStringBuilder builder=new SpannableStringBuilder();
    SpannableString txtSpannable= new SpannableString(string1);
    StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
    txtSpannable.setSpan(boldSpan, 0, string1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    builder.append(txtSpannable);
    builder.append(string2);
   textView.setText(builder, TextView.BufferType.SPANNABLE);
}
5
Umar Ata

J'utiliserais une ressource de chaîne comme celle-ci:

<string name="health_status"><b>Health:</b> %1$s</string>

Lorsque vous souhaitez définir l'état de santé, utilisez simplement ce code:

String ss1 = getString(R.string.health_status, strhealth);
4
Zachary McKenney

En kotlin, vous pouvez le faire. Je l'ai utilisé pour les caractères gras/Word dans une chaîne. Par exemple:

item = "Philippines"

query = "Phil"

résultat = Phil ippines

    val spannable = SpannableString(item)
    val indexStart = item.indexOf(query)
    val indexEnd = indexStart + query.length
    spannable.setSpan(StyleSpan(Typeface.BOLD), indexStart, indexEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

textView.text = spannable


Ci-dessous, j'ai mentionné le code que vous pouvez créer à travers spannableString dans Kotlin

val spannableStringBuilder = SpannableStringBuilder()

val boldSpan: StyleSpan = StyleSpan(Typeface.BOLD)

sp_text.setSpan(boldSpan, firstIndex, lastIndex,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

sp_text.setSpan(clickableSpan, firstIndex, lastIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            sp_text.setSpan(ForegroundColorSpan(ContextCompat.getColor(mContext, R.color.colorPrimary)), firstIndex, lastIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
1
Ashok Songara

Je pense que vous devriez utiliser 2 textView différents, une étiquette et une pour les données. c'est une pratique courante et bonne

0
theyouishere