LoginSignup
2
1

More than 3 years have passed since last update.

今更だがAndroidでダークテーマを試してみる

Posted at

Android10でダークテーマが使えるようになりましたが、あんまり触ったことがなかったのでやってみました。

一旦DayNight Themeを実装してみよう

DayNight Themeを実装すると、デフォルトではダークモードの変更により画面に変化があるみたいです。
レイアウトにはConstraintLayoutとToolBarだけの状態にしました。

基本 ダークモード
001_1.png 001_1.png

まず基本背景色が黒に変わりますね。背景色を指定していないレイアウトには影響がありそうです。
スクショには見えないですが、テキストのデフォルトカラーも変更されます。
その以外、Material Componentではダークテーマ用のデフォルトカラーが用意されているらしいです。

そしてToolBarの色ですが、これはリソースで色を指定しています。
ダークモードになるとvalues-night配下のリソースが使われるようになります。

values/colors.xml
<color name="colorPrimary">#6200EE</color>
<color name="toolBarColor">@color/colorPrimary</color>
values-night/colors.xml
<color name="colorPrimary">#BB86FC</color>

ToolBarの背景色はcolorPrimaryのリソースを使うようにしています。
そのcolorPrimaryがnightリソースで上書きされたため、色が変更になりましたね。
この状態でtoolBarColorをnightリソースで定義してみました。

values-night/colors.xml
<color name="colorContents">#212121</color>
<color name="toolBarColor">@color/colorContents</color>
結果
002.png

ToolBarの色が変わりました。

LifeCycleはどうなる?

クイック設定でダークモードのON、OFFをする時、アプリのテーマが切り替わるのですが、その時LifeCycleはどうなるでしょうか。
今はActivityだけあるのでそのままログを書き出してみました。

結果
003.png

Destroyまでしちゃいますね。
ではBottomNavigationを入れてFragmentを3つほど入れて試してみます。

結果
004.png

やっぱりDetachまで行きます。
SaveInstanceStateを利用してデータを復旧する必要がありそうです。

別にDayNight Themeではなくてもシステムのダークテーマ設定はリソースを変更する

DayNight Themeはvalue-nightを指定していない時、デフォルトのダークモード用のカラーが用意されているテーマで、Android10のシステムに追加されてダークテーマはvalue-nightにリソースがあればそれを使うようになっています。
以下は背景はvalue-nightにカラーを指定していて、RadioButtonのスタイルには指定していない時にダークテーマに切り替えた結果です。

AppCompat.Light.NoActionBar AppCompat.DayNight.NoActionBar
006_1.png 006_2.png

アプリの中でLight/Dark Themeに切り替える

システムの設定に寄せなくて、アプリでテーマができるようです。この場合システムの設定は無視されます。

MainActivity.kt
// システムに寄せる
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM)
// ライトテーマ
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)
// ダークテーマ
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES)
システムはダークテーマにして、アプリはライトテーマにする
005.png

このコードでの変更はAndroid10ではなくてもテーマが切り替えられます。(api24で試してみました)
そしてこの切り替えの時にも画面は再作成されます。

まとめ

  • DayNight Themeはダークテーマ上のデフォルトカラーを用意しているスタイル
  • Android 10に追加された明示的ダークテーマはONの時value-night配下のリソースを使う
  • アプリの中でテーマを切り替えられる(Android10ではなくてもいい)
  • アプリが起動中でのテーマの切り替えは画面を再作成させる
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1