290 votes

Android - jeu TextView TextStyle par programmation?

Est-il un moyen de régler le textStyle d'attribut d'un TextView par programmation? Il ne semble pas être un setTextStyle() méthode.

Pour être clair, je ne parle pas de la Vue / styles de Widget! Je veux parler est la suivante:

<TextView
  android:id="@+id/my_text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Hello World"
  android:textStyle="bold" />

495voto

Raz Points 2413
textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface est l'Attribut textStyle.

161voto

RacZo Points 5731

Disons que vous avez un style appelé RedHUGEText sur votre 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>

Il suffit de créer votre TextView comme d'habitude dans le XML layout/your_layout.xml fichier, 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é que vous faites ceci:

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

Il a travaillé pour moi! Et il a appliqué la couleur, la taille, la gravité, etc. Je l'ai utilisé sur les téléphones mobiles et les tablettes avec Android API Niveaux à partir de 8 à 17 ans sans problèmes.

Souvenez-vous... c'est utile seulement si le style du texte dépend vraiment une condition sur votre Java logique ou que vous êtes à la construction de l'INTERFACE utilisateur "à la volée" avec le code... si il ne le fait pas, il est préférable de 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, vous avez votre façon!

Espérons que cela aide!

66voto

teepee SONY Points 3962

Recherche pour setTextAppearance ou également setTextTypeface. Il y est même question sur stackoverflow: Comment changer un TextView du style au moment de l'exécution

59voto

Golu Points 7213

Donc beaucoup de chemin à 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);

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 via xml

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

9voto

Kevin Grant Points 660

Cette question est posée dans beaucoup d'endroits dans beaucoup de différentes manières. J'ai d'abord répondu ici, mais je pense que c'est pertinent dans ce fil (depuis que j'ai fini ici, quand j'étais à la recherche d'une réponse).

Il n'existe pas de ligne de solution à ce problème, mais cela a fonctionné pour mon cas d'utilisation. Le problème est, 'View(context, attrs, defStyle) constructeur ne fait pas référence à un style réel, il veut un attribut. Donc, nous allons:

  1. Définir un attribut
  2. Créer un style que vous souhaitez utiliser
  3. Appliquer un style de cet attribut sur notre thème
  4. Créer de nouvelles instances de notre point de vue avec cet attribut

Dans 'res/values/attrs.xml', de définir 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 custom 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/themes.xml" ou "res/values/styles.xml', de modifier le thème de votre application / activité et ajouter du style suivant:

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <item name="@attr/customTextViewStyle">@style/CustomTextView</item>
    </style>
    ... 
</resources>

Enfin, dans votre personnalisé TextView, vous pouvez maintenant utiliser le constructeur avec l'attribut et vous recevrez 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 en différentes variantes et différents endroits, mais il n'est pas nécessaire que le nom de la vue correspondre au style ou à l'attribut ou quoi que ce soit. Aussi, cette technique fonctionne avec n'importe quel affichage personnalisé, et pas seulement TextViews.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X