こんにちは。先月東京から神奈川に引っ越して自然多めの生活を送っている@akatsuki174です。普通の道端にきのこが生えているのにはびっくりしました。
Fammは先日ついにAndroidもダークテーマに対応したので、どのようなことを行ったのか書きます。
※ちなみに公式のダークテーマ対応ガイドはこちら。
完成品
このような見栄えになりました。かっこよい。
対応したこと
夜間用リソースの準備
night/styles.xml
, night/colors.xml
の2つを新たに用意して、ダークテーマの時にだけ使われるstyleとcolorを定義しました。
night/styles.xml
には<style name="AppTheme" parent="Theme.AppCompat.DayNight">
を記述し、ダークテーマをサポートするようにしました。
themeの指定
night/styles.xml
, styles.xml
の両方にstyle name="AppTheme" を定義したのち、AndroidManifest.xml
でthemeを指定しました。
<application android:theme="@style/AppTheme" ... >
メニューのアイコンカラーの修正
今まではtintで色を付けず素材そのままの黒を活かしていたため、ダークテーマにすると非常に見づらい問題が発生しました。AppTheme
にiconTint
の定義を追加したら想定通りの色になりました。
「2階層目」への対応
「今まではelevationで階層の区別がわかっていたところ」はダークテーマにするとわりとわかりづらかったので、「2階層目の黒」を定義して適宜使いました。この黒はTheme.AppCompat.DayNight.Dialog.Alert
の背景色と同じにしました。
ハイライト
前項の「2階層目」の色をあてようとした部分がすでにbackground
を持っているケースがありました。ググったところ、このような場合は通常時の背景色をbackground
に、タップされたときの色をforeground
にしたらうまくいきました。
before
android:background="?android:selectableItemBackground"
after
android:background="@color/famm_secondary_background" android:foreground="?android:selectableItemBackground"
RecyclerViewのdividerの色指定
ListViewのdividerは何もしなくても大丈夫なんですが、自分で引いていた&色の指定を固定にしてしまっていたRecyclerViewのdividerは対応が必要でした。DividerItemDecoration
を継承した独自クラスを作り、そこでdividerの色設定を行いました。
class FammDividerItemDecoration(context: Context, orientation: Int) : DividerItemDecoration(context, orientation) { init { ContextCompat.getDrawable(context, R.drawable.divider_item)?.let { setDrawable(it) } } }
色を直指定しているところの修正
@color/white
など色が直接指定されているところがあったので、colors.xml
で定義した色に変えました。
不備がある画像の差し替え
画像の一部が透過になってないケースがいくつかあったので差し替えました。
Tips
Android Studio上でダークテーマでの表示をすぐ確認できます。便利やん。
とはいえ稀に「プレビューではおかしいけど実際は大丈夫」ということもありました(下図はTabLayoutの部分が白になってしまっている)。最終的には実機確認が必要ですね。
苦労した、時間がかかったこと
確認作業
対応漏れがあるといけないのでQAさん、デザイナーさんにも手伝ってもらい、すべての画面をチェックしました(たぶん)。様々なユーザの状態でチェックするの大変だった…。
「なんでこの画面だけうまくいかないんだろう?」と思ったら、そのActivityがAppThemeではなく別のthemeを使っているのにAppThemeに対して変更を加えていた、なんてこともありました。
Lightモードのデグレチェック
調子に乗って色々変えていると、たまにLightモードでの表示がおかしくなってました。status barとかnavigation barとかをちょいちょいデグレさせてました。
感想
意外とAndroidでダークテーマ対応しているアプリがない&ダークテーマの実装に関する記事が少なく、わりと手探りの状態でやっていたので不安だらけでした。でもかっこいい見た目になったし、何より自分がダークテーマに対応されたFammアプリを使いたいと思っていたのでやって良かったなと思っています。
余談
Timers勢、ダミー画像にわりと猫画像を使いがちな気がするんですが、私は家に猫様がいるわけでもないので飯テロ画像を中心にしてみました。美味しそうな肉だろう。美味かったぞう。
PR
子育て家族アプリFammを運営するTimers inc.では、現在エンジニアを積極採用中!
急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください!
採用HP: http://timers-inc.com/engineerings