【Android】ステータスバーの色を変更する

ステータスバーの色を変更するのは下記で実施できます。

window.statusBarColor = Color.CYAN
  • 反映後

f:id:komattin:20191011151702p:plain

テキストやアイコンの色も変更したい場合

背景色を白とした場合、テキストやアイコンの色も白の為表示されません。 テキストの色を変更する為のプロパティや関数は用意されておりませんので、 SystemUiVisibilityを用いてビット操作する必要があります。

val state = StatusBarState.Dark

// ステータスバーの色変更
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

    window.apply {
        var newUiVisibility = decorView.systemUiVisibility

        if (state == StatusBarState.Light) {
            // 白背景
            statusBarColor = Color.WHITE
            // 黒のアイコン・テキスト
            newUiVisibility = newUiVisibility or SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
        } else if (state == StatusBarState.Dark) {
            // 黒背景
            statusBarColor = Color.BLACK
            // 白のアイコン・テキスト
            newUiVisibility = newUiVisibility and SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
        }

        when (state) {
            StatusBarState.Light -> {
                // 白背景
                statusBarColor = Color.WHITE
                // 黒のアイコン・テキスト
                newUiVisibility = newUiVisibility or SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
            }
            StatusBarState.Dark -> {
                // 黒背景
                statusBarColor = Color.BLACK
                // 白のアイコン・テキスト
                newUiVisibility = newUiVisibility and SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
            }
        }

        decorView.systemUiVisibility = newUiVisibility
    }
}
背景:白、テキスト:黒 背景:黒、テキスト:白
f:id:komattin:20191011152359p:plain f:id:komattin:20191011152409p:plain