Disons que je veux que toutes les TextViewinstances de mon application aient textColor="#ffffff". Existe-t-il un moyen de définir cela dans un seul endroit au lieu de le définir pour chacun TextView?
Disons que je veux que toutes les TextViewinstances de mon application aient textColor="#ffffff". Existe-t-il un moyen de définir cela dans un seul endroit au lieu de le définir pour chacun TextView?
Réponses:
En fait, vous pouvez définir un style par défaut pour TextViews (et la plupart des autres widgets intégrés) sans avoir besoin de créer une classe Java personnalisée ou de définir le style individuellement.
Si vous regardez dans themes.xmlla source Android, vous verrez un tas d'attributs pour le style par défaut pour divers widgets. La clé est l' attribut textViewStyle(ou editTextStyle, etc.) que vous remplacez dans votre thème personnalisé. Vous pouvez les remplacer de la manière suivante:
Créez un styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme">
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
</style>
<style name="MyTextViewStyle" parent="android:Widget.TextView">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
Ensuite, appliquez simplement ce thème à votre application dans AndroidManifest.xml:
<application […] android:theme="@style/MyTheme">…
Et toutes vos vues de texte utiliseront par défaut le style défini dans MyTextViewStyle(dans cet exemple, gras et rouge)!
Cela a été testé sur des appareils à partir du niveau d'API 4 et semble fonctionner très bien.
<item name="android:textViewStyle">@style/MyTextViewStyle</item>dans le style MyTheme et que j'applique ensuite le style à mon application, tous mes TextViews seront affichés en fonction du style (même le nom de l'application dans la barre d'action). Comment résoudre le problème avec la barre d'action? Je veux qu'il ait l'apparence par défaut. Github
<item name="android:textViewStyle">@style/MyTextViewStyle</item>y mettre aussi, en indiquant simplement la valeur par défaut d'ActionBar (ou quelque chose de similaire)
Il existe deux façons de procéder:
Vous pouvez définir vos propres styles en créant des fichiers XML dans le res/valuesrépertoire. Supposons donc que vous souhaitiez avoir du texte en rouge et en gras, puis vous créez un fichier avec ce contenu:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyRedTheme" parent="android:Theme.Light">
<item name="android:textAppearance">@style/MyRedTextAppearance</item>
</style>
<style name="MyRedTextAppearance" parent="@android:style/TextAppearance">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
Vous pouvez le nommer comme vous le souhaitez, par exemple res/values/red.xml. Ensuite, la seule chose que vous avez à faire est d'utiliser cette vue dans les widgets que vous souhaitez, par exemple:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
style="@style/MyRedTheme"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is red, isn't it?"
/>
</LinearLayout>
Pour plus d'informations, vous pouvez lire cet article: Comprendre les thèmes et styles Android
C'est une autre façon possible d'y parvenir, et ce serait de fournir le vôtre TextViewqui définira toujours la couleur du texte à ce que vous voulez; par exemple:
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.TextView;
public class RedTextView extends TextView{
public RedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setTextColor(Color.RED);
}
}
Ensuite, il vous suffit de le traiter comme normal TextViewdans votre fichier XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<org.example.RedTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is red, isn't it?"
/>
</LinearLayout>
Que vous utilisiez l'un ou l'autre choix dépend de vos besoins. Si la seule chose que vous souhaitez faire est de modifier l'apparence, la meilleure approche est la première. D'autre part, si vous souhaitez modifier l'apparence et ajouter de nouvelles fonctionnalités à vos widgets, la seconde est la voie à suivre.
custom_view_layout.xmlfichier utilisé pour gonfler une classe personnalisée?
Pour la couleur du texte par défaut TextView, définissez android:textColorTertiarydans votre thème la couleur souhaitée:
<item name="android:textColorTertiary">@color/your_text_color</item>
De nombreuses autres couleurs de contrôle Android peuvent être contrôlées à l'aide d'attributs de structure ou de prise en charge des attributs de bibliothèque si vous utilisez la bibliothèque de prise en charge.
Pour obtenir une liste des attributs que vous pouvez définir, consultez le code source Android de styles.xmlet themes.xml, ou cet essentiel très utile de Dan Lew, essayez de changer chaque valeur et voyez ce qu'elles changent à l'écran.