Androidでダークテーマを試す

Keisuke Kawajiri
Jan 6, 2020 · 5 min read

Android 10以上は、システム設定(端末のテーマ設定)で、ライトテーマ/ダークテーマの切替えが可能になっています。

ダークテーマへの切替え

そのため、Android 10以上でダークテーマに対応するには、アプリのテーマをダークテーマに対応しているテーマに設定するだけです。
一方、Android 10未満やアプリでテーマ変更したい場合は、上述したアプリのテーマ設定に加えて、プログラム上にライトテーマ/ダークテーマを切替える処理を実装します。

ダークテーマに対応しているテーマを設定する

次のテーマを継承したテーマをアプリに設定します。

今回は、Theme.MaterialComponents.DayNightを利用してみました。
このテーマの利用にあたっては、こちらを参照して環境の設定をして下さい(dependencyの設定やcompileSdkVersionを28以上にする等の設定です)。
次にアプリのテーマを設定します。
styles.xmlに次のスタイルを定義します。

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<!-- Customize your theme here. -->
...
</style>

AndroidManifest.xmlにて、上で定義したスタイルをアプリのテーマに設定します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="...">

<application
...
android:theme="@style/AppTheme">
...
</application>
</manifest>

ダークテーマのスタイルをカスタマイズしたい場合

ダークテーマのスタイルをカスタマイズしたい場合は、代替リソースの仕組みを利用します。
res/配下に<resource_name>-nightディレクトリを作成して、そのディレクトリ配下にリソースを作成すれば、ダークテーマ用のリソースになります。
例えば、ダークテーマ用のカラーリソースを作りたい場合は、 values-night ディレクトリを作成します。そして、その配下にcolors.xmlを作成してダークテーマ用のcolorを定義していきます。
リソースの新規作成からも、ダークテーマ用のリソースを作成できます。qualifiersでNight Modeを指定して作成します。

ダークテーマ用のcolorsファイルを作成する

URLメモでは、次のcolorsを定義しました。そして、スタイル側でそのcolorを参照することで、ライトテーマとダークテーマでスタイルが変わるようにしました。

次のように動作します。

プログラムからダークテーマに変更する

Android 10未満やアプリからテーマ変更したい場合は、プログラム上でダークテーマに切替える処理をします。
切替える処理は、 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) を実行するのみです。
次のコードは、テスト用に作成したものです。
メニューアイコン押下時にテーマを切替える処理をしています。

次のように動作します。

URL Memo

URLメモ(Androidアプリ)の開発記録です。

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store