はじめに
Androidでは、アクションバーの色を濃くしてステータスバーの色にセットしているアプリが多く見られます。
Nintendo Switch Online | Trello | |
---|---|---|
その理由として、 colorPrimary
がアクションバーの色、 colorPrimaryDark
がステータスバーの色に紐付いているからだと思います。
本記事では、アクションバーの色を元に、このような有名アプリと同じようにステータスバーの色を濃くする方法を紹介します。
結論
アクションバーの色のHue(色相)を -6
、Lightness(輝度)を -0.09
してステータスバーの色にセットするだけです。
コードでは以下で実現できます。
import android.graphics.Color
import com.theuhooi.uhooipicbook.extensions.actionBarColorToStatusBarColor
val actionBarColor = Color.parseColor("#6200EE")
this.window.statusBarColor = actionBarColor.actionBarColorToStatusBarColor()
私は Int
に actionBarColorToStatusBarColor()
という拡張関数を作って実現しました。
package com.theuhooi.uhooipicbook.extensions
import androidx.core.graphics.ColorUtils
fun Int.actionBarColorToStatusBarColor(): Int {
val hsl = FloatArray(3)
ColorUtils.colorToHSL(this, hsl)
hsl[0] = max(0F, hsl[0] - 6)
hsl[2] = max(0F, hsl[2] - 0.09F)
return ColorUtils.HSLToColor(hsl)
}
緑、紫、赤で実行した結果です。
緑 | 紫 | 赤 |
---|---|---|
いい感じ だと思いませんか?
解説
デフォルトの colorPrimary
と colorPrimaryDark
のHSLを分析し、同じバランスにしただけです。
`colorPrimary` と `colorPrimaryDark` のデフォルト値を分析してみる
— ウホーイ (@the_uhooi) April 15, 2020
色相は赤を減らし、彩度を変えず、輝度を暗くしている pic.twitter.com/EYV8JEm1pv
要は、色をRGBでなくHSLで扱い、ちょっと色を変えて暗くした、ということです。
おわりに
かんたんにステータスバーの色をいい感じにすることができました!
しかし、単純にHとLをマイナスしているだけなので、デザイナーがいるチームではきちんと色を考えて定義すべきだと思います。
私は個人開発でサクッと実現したかったので今回紹介した方法を使っていますが、業務で使うかはわかりません。
HSLについても勉強不足です。
特にHを単純にマイナスするのは微妙な気がしているので、もっといい調整方法があれば教えていただけると嬉しいです。