2 votes

Prise en charge des thèmes clairs et sombres dans Android Pie

Android Pie a ajouté la possibilité de basculer entre le thème clair et le thème foncé dans le menu Paramètres -> Affichage -> Thème de l'appareil.

Je veux que mon application applique le bon thème en fonction du thème de l'appareil défini dans les paramètres de l'appareil.

Selon la Styles et thèmes Guide Android, pour le mode sombre, l'application doit utiliser un thème qui s'étend jusqu'à l'écran d'accueil. Theme.AppCompat Pour le mode lumineux, l'application doit utiliser un thème qui étend la notion de Theme.AppCompat.Light .

J'ai donc créé deux thèmes dans mon application :

<style name="AppTheme.Dark" parent="Theme.AppCompat">
  ...
</style>

<style name="AppTheme.Light" parent="Theme.AppCompat.Light">
  ...
</style>

Toutefois, en AndroidManifest.xml lorsque je déclare l'application avec l'option <application> Je ne peux spécifier qu'un seul thème dans la balise android:theme attribut :

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher"
    android:supportsRtl="true"
    android:theme="@style/AppTheme.Light"
    tools:replace="android:name">

Comment déclarer ma candidature en AndroidManifest.xml a de manière dynamique choisir @style/AppTheme.Light o @style/AppTheme.Dark selon le thème de l'appareil défini dans les paramètres de l'appareil ?

0voto

D Prince Points 865

Si vous souhaitez modifier le thème d'une activité existante, appelez recreate() après setTheme().

Note : n'appelez pas recreate si vous changez de thème dans onCreate(), pour éviter une boucle infinie.

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Call setTheme before creation of any(!) View.
         setTheme(android.R.style.Theme_Dark);

        // ...
        setContentView(R.layout.main);
    }

0voto

Dewey Reed Points 1924

Vous pouvez essayer Theme.AppCompat.DayNight au lieu de définir deux thèmes. Sa mise en œuvre dans cette vidéo Coût d'un pixel de couleur .

Cependant, lorsque je teste cela sur un émulateur, le fait de basculer le menu Paramètres -> Affichage -> Thème de l'appareil ne fonctionne pas. Je dois basculer Options développeurs -> Mode nuit -> Toujours activé et le thème sombre est choisi automatiquement.

Comme je ne possède pas d'appareil Android Pie, je ne sais pas s'il s'agit d'un bug de l'émulateur.

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