Est-il possible de définir par programme l'attribut textStyle
d'un TextView
? Il ne semble pas y avoir de méthode setTextStyle()
.
Pour être clair, je ne parle pas des styles View/Widget! Je parle de ce qui suit:
<TextView
Android:id="@+id/my_text"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Hello World"
Android:textStyle="bold" />
textview.setTypeface(Typeface.DEFAULT_BOLD);
setTypeface est l'attribut textStyle.
Comme Shankar V ajouté, pour conserver les attributs de police définis précédemment, vous pouvez utiliser:
textview.setTypeface(textview.getTypeface(), Typeface.BOLD);
Supposons que vous ayez un style appelé RedHUGEText sur votre fichier values / styles.xml:
<style name="RedHUGEText" parent="@Android:style/Widget.TextView">
<item name="Android:textSize">@dimen/text_size_huge</item>
<item name="Android:textColor">@color/red</item>
<item name="Android:textStyle">bold</item>
</style>
Créez simplement votre TextView comme d'habitude dans le fichier layout XML/your_layout.xml, par exemple:
<TextView Android:id="@+id/text_view_title"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content
Android:text="FOO" />
Et dans le code Java de votre activité, procédez comme suit:
TextView textViewTitle = (TextView) findViewById(R.id.text_view_title);
textViewTitle.setTextAppearance(this, R.style.RedHUGEText);
Cela a fonctionné pour moi! Et il a appliqué la couleur, la taille, la gravité, etc. Je l'ai utilisé sur des combinés et des tablettes avec Android API Niveaux de 8 à 17 sans aucun problème.
Rappelez-vous ... cela n'est utile que si le style du texte dépend vraiment d'une condition de votre logique Java ou si vous construisez l'interface utilisateur "à la volée" avec du code ... si ce n'est pas le cas , mieux vaut juste faire:
<TextView Android:id="@+id/text_view_title"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content
Android:text="FOO"
style="@style/RedHUGEText" />
Vous pouvez toujours l'avoir à votre façon!
J'espère que ça aide!
Recherchez setTextAppearance
ou aussi setTextTypeface
. Il y a une question similaire sur stackoverflow: Comment changer le style d'un TextView à l'exécution
Tellement de façons d'accomplir cette tâche que certaines sont ci-dessous: -
1.
String text_view_str = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!";
TextView tv = (TextView)findViewById(R.id.ur_text_view_id);
tv.setText(Html.fromHtml(text_view_str));
2.
tv.setTypeface(null, Typeface.BOLD);
tv.setTypeface(null, Typeface.ITALIC);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
tv.setTypeface(null, Typeface.NORMAL);
.
SpannableString spannablecontent=new SpannableString(o.content.toString());
spannablecontent.setSpan(new StyleSpan(Android.graphics.Typeface.BOLD_ITALIC),
0,spannablecontent.length(), 0);
// set Text here
tt.setText(spannablecontent);
4.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="boldText">
<item name="Android:textStyle">bold|italic</item>
<item name="Android:textColor">#FFFFFF</item>
</style>
<style name="normalText">
<item name="Android:textStyle">normal</item>
<item name="Android:textColor">#C0C0C0</item>
</style>
</resources>
tv.setTextAppearance(getApplicationContext(), R.style.boldText);
ou si vous voulez via xml
Android:textStyle="normal"
Android:textStyle="normal|bold"
Android:textStyle="normal|italic"
Android:textStyle="bold"
Android:textStyle="bold|italic"
Cette question est posée dans beaucoup d'endroits de différentes manières. J'y ai d'abord répondu ici, mais j'estime que c'est également pertinent dans ce fil (puisque j'ai fini par ici lorsque je cherchais une réponse).
Il n'y a pas de solution en une seule ligne à ce problème, mais cela a fonctionné pour mon cas d'utilisation. Le problème est que le constructeur 'View (context, attrs, defStyle)' ne fait pas référence à un style réel, il veut un attribut. Nous allons donc:
Dans 'res/values / attrs.xml', définissez un nouvel attribut:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="customTextViewStyle" format="reference"/>
...
</resources>
Dans res/values / styles.xml ', je vais créer le style que je veux utiliser sur mon TextView personnalisé
<style name="CustomTextView">
<item name="Android:textSize">18sp</item>
<item name="Android:textColor">@color/white</item>
<item name="Android:paddingLeft">14dp</item>
</style>
Dans 'res/values / themes.xml' ou 'res/values / styles.xml', modifiez le thème de votre application/activité et ajoutez le style suivant:
<resources>
<style name="AppBaseTheme" parent="Android:Theme.Light">
<item name="@attr/customTextViewStyle">@style/CustomTextView</item>
</style>
...
</resources>
Enfin, dans votre TextView personnalisé, vous pouvez maintenant utiliser le constructeur avec l’attribut et il recevra votre style
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context, null, R.attr.customTextView);
}
}
Il est à noter que j'ai utilisé à plusieurs reprises customTextView dans différentes variantes et à différents endroits, mais il n'est en aucun cas nécessaire que le nom de la vue corresponde au style, à l'attribut ou à quoi que ce soit. En outre, cette technique devrait fonctionner avec n'importe quelle vue personnalisée, pas seulement avec TextViews.
Kotlin Version
Pour conserver la police actuelle en plus du style de texte:
textView.apply {
setTypeface(typeface, Typeface.NORMAL)
// or
setTypeface(typeface, Typeface.BOLD)
// or
setTypeface(typeface, Typeface.ITALIC)
// or
setTypeface(typeface, Typeface.BOLD_ITALIC)
}
Cela a fonctionné pour moi
textview.setTypeface(textview.getTypeface(), Typeface.BOLD);
ou
textview.setTypeface(Typeface.DEFAULT_BOLD);
Je l'ai résolu avec deux méthodes simples.
Suivez l'explication.
Ma déclaration de style existante:
<style name="SearchInfoText">
<item name="Android:layout_width">wrap_content</item>
<item name="Android:layout_height">wrap_content</item>
<item name="Android:textSize">24sp</item>
<item name="Android:textColor">@color/Church_Grey</item>
<item name="Android:shadowColor">@color/Shadow_Church</item>
<item name="Android:shadowRadius">3</item>
<item name="Android:shadowDx">1</item>
<item name="Android:shadowDy">1</item>
</style>
Mon code Android Java:
TextView locationName = new TextView(getSupportActivity());
locationName.setId(IdGenerator.generateViewId());
locationName.setText(location.getName());
locationName.setLayoutParams(super.centerHorizontal());
locationName.setTextSize(24f);
locationName.setPadding(0, 0, 0, 15);
locationName.setTextColor(getResources().getColor(R.color.Church_Grey));
locationName.setShadowLayer(3, 1, 1, getResources().getColor(R.color.Shadow_Church));
Cordialement.