17
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

いい感じにステータスバーの色をアクションバーの色と合わせる方法(Android)

Last updated at Posted at 2020-05-07

はじめに

Androidでは、アクションバーの色を濃くしてステータスバーの色にセットしているアプリが多く見られます。

Nintendo Switch Online Trello Instagram
EVm70iSUcAEwsn6.jpeg EVm71buU4AA5jP-.jpeg EVm711fVAAIQdP3.jpeg

その理由として、 colorPrimary がアクションバーの色、 colorPrimaryDark がステータスバーの色に紐付いているからだと思います。

本記事では、アクションバーの色を元に、このような有名アプリと同じようにステータスバーの色を濃くする方法を紹介します。

結論

アクションバーの色のHue(色相)を -6 、Lightness(輝度)を -0.09 してステータスバーの色にセットするだけです。

コードでは以下で実現できます。

MainActivity.kt
import android.graphics.Color
import com.theuhooi.uhooipicbook.extensions.actionBarColorToStatusBarColor

val actionBarColor = Color.parseColor("#6200EE")
this.window.statusBarColor = actionBarColor.actionBarColorToStatusBarColor()

私は IntactionBarColorToStatusBarColor() という拡張関数を作って実現しました。

Int+Color.kt
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)
}

緑、紫、赤で実行した結果です。

Screenshot_1588813316.png Screenshot_1588813327.png Screenshot_1588813333.png

いい感じ だと思いませんか?

解説

デフォルトの colorPrimarycolorPrimaryDark のHSLを分析し、同じバランスにしただけです。

要は、色をRGBでなくHSLで扱い、ちょっと色を変えて暗くした、ということです。

おわりに

かんたんにステータスバーの色をいい感じにすることができました!
しかし、単純にHとLをマイナスしているだけなので、デザイナーがいるチームではきちんと色を考えて定義すべきだと思います。
私は個人開発でサクッと実現したかったので今回紹介した方法を使っていますが、業務で使うかはわかりません。

HSLについても勉強不足です。
特にHを単純にマイナスするのは微妙な気がしているので、もっといい調整方法があれば教えていただけると嬉しいです。

参考リンク

17
11
7

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
17
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?