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