Android - jeu TextView TextStyle par programmation?

y a-t-il un moyen de programmer l'attribut textStyle d'un TextView ? Il ne semble pas y avoir de méthode setTextStyle() .

pour être clair, Je ne parle pas de View / Widget styles! 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" />
176
demandé sur Jake Wilson 2011-10-27 20:26:49

9 réponses

textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface est l'attribut textStyle.

Comme Shankar V , a ajouté, pour préserver l'définie précédemment police les attributs que vous pouvez utiliser:

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);
303
répondu Raz 2017-07-26 20:26:54

disons que vous avez un style appelé RedHUGEText sur vos valeurs/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 la mise en page XML/your_layout.fichier xml, disons:

<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é vous faites ceci:

TextView textViewTitle = (TextView) findViewById(R.id.text_view_title);
textViewTitle.setTextAppearance(this, R.style.RedHUGEText);

ça a marché pour moi! Et il a appliqué la couleur, la taille, la gravité, etc. Je l'ai utilisé sur les combinés et les tablettes avec des niveaux D'API Android de 8 à 17 sans problème.

rappelez-vous... ceci 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, il vaut mieux 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 faire les choses à votre manière!

Espère que cela aide!

98
répondu Oscar Salguero 2013-07-18 21:26:54

cherche setTextAppearance ou aussi setTextTypeface . Il y a une question similaire sur stackoverflow: Comment changer le style de TextView à l'exécution

57
répondu peter.bartos 2017-05-23 10:31:33

tant de façons d'accomplir cette tâche certains 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);

3.

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 tu veux par xml

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
42
répondu duggu 2015-02-04 17:15:46

Cette question est posée dans beaucoup d'endroits dans beaucoup de différentes manières. Je l'ai d'abord répondu ici, mais je pense qu'il est pertinent dans ce fil ainsi (depuis que j'ai fini ici quand je cherchais une réponse).

il n'y a pas de solution en 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. Donc, nous allons:

  1. définir un attribut
  2. créez un style que vous souhaitez utiliser
  3. appliquer un style pour cet attribut sur notre thème
  4. créer de nouvelles instances de notre vue avec cet attribut

Dans " res/values/attrs.xml', définir un nouvel attribut:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="customTextViewStyle" format="reference"/>
    ...
</resources>    

Dans res/values/styles.je vais créer le style que je veux utiliser sur ma commande TextView

<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/thèmes.xml' ou ' res/values / styles.xml', modifier le thème de votre application / activité et ajouter 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 intéressant de noter que j'ai utilisé à plusieurs reprises customTextView dans différentes variantes et différents endroits, mais il est dans aucune manière nécessaire que le nom de la vue correspondre au style ou à l'attribut ou quoi que ce soit. En outre, cette technique devrait fonctionner avec n'importe quelle vue personnalisée, pas seulement des vues de texte.

5
répondu Kevin Grant 2017-05-23 11:47:22

cela a fonctionné pour moi

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

ou

textview.setTypeface(Typeface.DEFAULT_BOLD);
3
répondu Ray Hunter 2016-07-12 23:12:08

Je l'ai résolu avec deux méthodes simples.

suivre l'explication.

Mon style de déclaration:

<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 Java Android:

    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.

1
répondu andresmafra 2013-06-24 15:29:42

* * * * * 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)
}
1
répondu aminography 2018-09-29 13:42:45

regardez ça.

cette fonctionnalité n'est pas prise en charge actuellement.

comment programmer L'attribut Style dans Android?

0
répondu dcanh121 2017-05-23 12:26:32