Je veux soutenir différents thèmes dans mon application Android. Les thèmes ne doivent différer que dans deux couleurs. Donc, il y a ces couleurs pour chaque thème:Changer uniquement la couleur lors du changement de thème
- Couleur primaire
- Couleur secondaire
Ce que je veux, qu'il ya un grand thème par défaut, qui a aussi des enfants comme des styles bouton et, comme ceci (styles.xml):
<style name="DefaultTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="homeAsUpIndicator">@drawable/my_stackoverflow_arrow</item>
[...]
</style>
<style name="DefaultTheme.NoActionBar">
<!-- hide action bar and title -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="DefaultTheme.Button">
<item name="android:textAllCaps">true</item>
<item name="android:textStyle">bold</item>
[...]
</style>
Mais maintenant je veux aussi changer les thèmes pour différentes couleurs. Par conséquent, j'ai créé une ressource dans le fichier attrs.xml
:
<resources>
<attr name="ThemeColorPrimary" format="reference" />
<attr name="ThemeColorSecondary" format="reference" />
</resources>
Alors maintenant, je peux utiliser cet attribut dans mon styles.xml
d'en haut comme ceci:
<style name="DefaultTheme.Button">
<item name="android:textAllCaps">true</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">?attr/ThemeColorPrimary</item>
[...]
</style>
Mais comment puis-je créer mes thèmes de couleur? Je sais que je dois faire quelque chose comme ceci:
<item name="ThemeColorPrimary">@color/ThemeBluePrimary</item>
Mais où? Et quel thème hérite de quoi? Si j'ai maintenant quelque chose comme:
<style name="BlueTheme" parent="DefaultTheme">
<item name="ThemeColorPrimary">@color/ThemeBluePrimary</item>
<item name="ThemeColorSecondary">@color/ThemeBlueSecondary</item>
</style>
<style name="GreyTheme" parent="DefaultTheme">
<item name="ThemeColorPrimary">@color/ThemeGreyPrimary</item>
<item name="ThemeColorSecondary">@color/ThemeGreySecondary</item>
</style>
<style name="BlackTheme" parent="DefaultTheme">
<item name="ThemeColorPrimary">@color/ThemeBlackPrimary</item>
<item name="ThemeColorSecondary">@color/ThemeBlackSecondary</item>
</style>
Je ne peux pas préciser dans AndroidManifest.xml
le thème comme celui-ci:
<activity
android:name="StackOverflowActivity"
android:screenOrientation="portrait"
android:theme="@style/DefaultTheme.NoActionBar" />
Étant donné que les ressources indiquées seraient manquants. Sinon, je ne peux pas non plus à ceci:
<activity
android:name="StackOverflowActivity"
android:screenOrientation="portrait"
android:theme="@style/BlueTheme.NoActionBar" />
parce BlueTheme n'a pas d'enfant qui est appelé « NoActionBar ». Je sais que c'est déroutant, je suis assez confus moi-même. Comment puis-je résoudre ce problème? Merci d'avance.