web-dev-qa-db-fra.com

Comment changer la couleur du texte par défaut en utilisant un thème personnalisé?

Ce que j'essaie devrait être assez simple avec les thèmes, mais je ne trouve pas comment: je veux que tout le texte soit blanc par défaut dans mon application. J'ai créé un thème personnalisé dans theme.xml:

<style name="Theme" parent="@Android:Theme">
</style>

<style name="TextAppearance.Theme" parent="@Android:TextAppearance.Theme">
    <item name="Android:textColor">#ffffffff</item>
</style>

et le définir pour toute l'application:

<application
    Android:icon="@drawable/icon"
    Android:label="@string/app_name"
    Android:theme="@style/Theme">

Mais les étiquettes sont toujours noires. Qu'est-ce qui manque?

PS: Comment puis-je définir en outre des styles pour différentes tailles de texte, à appliquer par widget? Est-ce que quelque chose comme ça est correct?

<style name="Theme.smallText">
    <item name="Android:textSize">12dp</item>
</style>

mettre à jour

J'ai jeté un œil à themes.xml à Android SDK, il montre comment définir le style de texte d'un thème:

<item name="textAppearance">@Android:style/TextAppearance</item>

Dans mon cas, cela devrait fonctionner avec cette définition:

<style name="Theme" parent="@Android:Theme">
    <item name="Android:textAppearance">@style/MyText</item>
</style>

<style name="MyText" parent="@Android:style/TextAppearance">
    <item name="Android:textColor">#ffffffff</item>
</style>

Cependant, ne fonctionne toujours pas.

Je viens de trouver une autre publication pour le même problème: http://groups.google.com/group/Android-developers/browse_thread/thread/2897ccd0884546b9

54
didi_X8

Dans votre Manifest, vous devez référencer le nom du style contenant la couleur du texte item. Pour le moment, vous ne faites que référencer un style vide. Donc, dans votre theme.xml, ne faites que ceci style:

<style name="Theme" parent="@Android:style/TextAppearance">
    <item name="Android:textColor">#ffffffff</item>
</style>

Et vous garder référence dans le Manifest le même (Android:theme="@style/Theme")

ÉDITER :

theme.xml:

<style name="MyTheme" parent="@Android:style/TextAppearance">
    <item name="Android:textColor">#ffffffff</item>
    <item name="Android:textSize">12dp</item>
</style>

Manifeste:

<application
    Android:icon="@drawable/icon"
    Android:label="@string/app_name"
    Android:theme="@style/MyTheme">

Remarquez que je combine la couleur et la taille du texte dans le même style. De plus, j'ai changé le nom du thème en MyTheme et je le référence maintenant dans Manifest. Et j'ai changé pour @Android:style/TextAppearance pour la valeur parent.

51
koopaking3

Lorsque vous créez une application, un fichier appelé styles.xml est créé dans votre dossier res/values. Si vous modifiez les styles, vous pouvez modifier l’arrière-plan, la couleur du texte, etc. de toutes vos mises en page. De cette façon, vous n’avez pas à aller dans chaque mise en page individuelle et à la modifier manuellement.

styles.xml:

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="Theme.AppBaseTheme" parent="@Android:style/Theme.Light">
    <item name="Android:editTextColor">#295055</item> 
    <item name="Android:textColorPrimary">#295055</item>
    <item name="Android:textColorSecondary">#295055</item>
    <item name="Android:textColorTertiary">#295055</item>
    <item name="Android:textColorPrimaryInverse">#295055</item>
    <item name="Android:textColorSecondaryInverse">#295055</item>
    <item name="Android:textColorTertiaryInverse">#295055</item>

     <item name="Android:windowBackground">@drawable/custom_background</item>        
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

parent="@Android:style/Theme.Light" sont les couleurs natives de Google. Voici une référence des styles natifs: https://Android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml

Le style par défaut Android s'appelle également "Thème". Donc, vous l'appelez Thème, vous avez probablement confondu le programme.

name="Theme.AppBaseTheme" signifie que vous créez un style qui hérite de tous les styles de parent="@Android:style/Theme.Light". Vous pouvez ignorer cette partie, sauf si vous souhaitez hériter à nouveau d'AppBaseTheme. = <style name="AppTheme" parent="AppBaseTheme">

@ drawable/custom_background est une image personnalisée que j’ai placée dans le dossier drawable. C'est une image 300x300 png.

# 295055 est une couleur bleu foncé.

Mon code modifie la couleur de fond et du texte. Pour le texte du bouton, consultez les styles de Google (le lien que je vous ai donné ci-dessus).

Puis dans Android Manifest, souvenez-vous d'inclure le code:

<application
Android:theme="@style/Theme.AppBaseTheme">
41
Gene

Vous ne pouvez pas utiliser @Android:style/TextAppearance en tant que parent du thème de l'ensemble de l'application; c'est pourquoi la solution de koopaking semble tout à fait cassé.

Pour modifier la couleur du texte par défaut partout dans votre application à l'aide d'un thème personnalisé, essayez quelque chose comme ceci. Fonctionne au moins sur Android 4.0+ (API de niveau 14+).

res/values/themes.xml:

<resources>    
    <style name="MyAppTheme" parent="Android:Theme.Holo.Light">
        <!-- Change default text colour from dark grey to black -->
        <item name="Android:textColor">@Android:color/black</item>
    </style>
</resources>

Manifeste:

<application
    ...
    Android:theme="@style/MyAppTheme">

Mise à jour

L'inconvénient de ce qui précède est que désactivé Les éléments du menu de débordement de la barre d'action utilisent la couleur par défaut au lieu d'être grisés. (Bien entendu, si vous n'utilisez pas les éléments de menu désactivés dans votre application, cela n'a pas d'importance.)

Comme j'ai appris en posant cette question , un meilleur moyen est de définir la couleur en utilisant un dessinable :

<item name="Android:textColor">@drawable/default_text_color</item>

...avec res/drawable/default_text_color.xml spécifiant séparé state_enabled="false" Couleur:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false" Android:color="@Android:color/darker_gray"/>
    <item Android:color="@Android:color/black"/>
</selector>
18
Jonik

Vérifiez si la présentation de votre activité remplace le thème , recherchez la présentation de votre activité située à layout/*your_activity*.xml Et recherchez TextView = qui contient Android:textColor="(some hex code") quelque chose comme ça sur la présentation d'activité, et le supprime. Ensuite, exécutez votre code à nouveau.

1
clouu