hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

読書尚友 夜間モード

macOS Mojave でダークモードが搭載され、他OSでも流行りそうな気配である。

AndroidではAndroid N Developer Preview(初期版)では夜間モードがあったが、実際の製品では搭載が見送られた。だがスマートフォンの場合はバッテリの持ちが長くなるメリットがあるため、将来的に標準搭載されると思う。Twitterのようにアプリレベルで夜間モードを搭載しているものもある。

実はSupport Library の AppCompat 23.2.0 以降、DayNight テーマが導入されており、アプリレベルでの実装が簡単になった

qiita.com

ということで読書尚友にも夜間モードを実装してみた。

f:id:hishida:20190206163531j:plain

f:id:hishida:20190206163543j:plain

f:id:hishida:20190206163555j:plain

f:id:hishida:20190206163606j:plain

読書画面の背景色はこれまでもカスタマイズできたが、すべての画面のパーツの背景色をダークモードに切り替えられるのがミソである。

 

実装方法

ActivityのテーマのベースにTheme.AppCompat.DayNightを使用します。

styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.ActionBar">
<item name="windowActionBar">true</item>
<item name="windowNoTitle">false</item>
</style>

</resources>

 

 

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="textColorPrimary">#FFFFFF</color>

</resources>

 

 

AndroidManifest.xml

<activity android:name="MainActivity"

android:label="@string/app_name"              android:theme="@style/AppTheme.ActionBar" >

</activity>

 

 アプリでは、OnCreateの先頭で夜間モードを設定します。

MainActivity.java

public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {

if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {  AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
}
super.onCreate(savedInstanceState);
.....

 

 

AppCompatDelegate.MODE_NIGHT_AUTO 自動切替
AppCompatDelegate.MODE_NIGHT_NO 夜間モードオフ
AppCompatDelegate.MODE_NIGHT_YES 夜間モードオン
AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM システムに依存

 自動切替を実験したところ、22:00に夜間モードに切り替わるようだ。