【Android】ステータスバーのデザインを変更する【Java/Kotlin】

こんにちは!

今回はステータスバーのデザインを変更してみましょう!

ステータスバーとは?

端末常備に時間やバッテリー残量が表示されているあのバーのことをステータスバーといいます。

実はこのステータスバーのデザインを変更できる事が可能です!

では早速デザイン変更してみましょう

ステータスバーの色を変更する(単色)

まずはステータスバーの色を変更してみましょう

筆者はMainActivityクラスで実装しています。

// ステータスバーの色を変更する
getWindow().setStatusBarColor(Color.RED);
// ステータスバーの色を変更する
window.statusBarColor = Color.RED

setStatusBarColor()の説明

引数型説明
第一引数Int(ColorInt)設定したColorIntがステータスバーの色に反映される

ステータスバーの色を変更する(グラデーション)

続いては単色ではなくステータスバーの色をグラデーションさせてみましょう

実はグラデーション表示ができるメソッド等はサポートされていません。。

ゴリ押し実装で対応してみます。処理については後述します。

// グラデーションの向きを設定
GradientDrawable.Orientation gradationOrientation = GradientDrawable.Orientation.RIGHT_LEFT;
// グラデーションの色を作成
int c1 = Color.parseColor("#000000");
int c2 = Color.parseColor("#FFFFFF");
int[] colors = {c1, c2};
GradientDrawable gradientDrawable = new GradientDrawable(gradationOrientation, colors);

//ステータスバーの背景を透明にする
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().setBackgroundDrawable(gradientDrawable);
// グラデーションの向きを設定
val gradationOrientation = GradientDrawable.Orientation.RIGHT_LEFT
// グラデーションの色を作成
val c1 = Color.parseColor("#000000")
val c2 = Color.parseColor("#FFFFFF")
val colors: IntArray = intArrayOf(c1, c2)
val gradientDrawable = GradientDrawable(gradationOrientation, colors)

//ステータスバーの背景を透明にする
window?.statusBarColor = Color.TRANSPARENT
window?.setBackgroundDrawable(gradientDrawable)

実装のポイント

1.Windowにグラデーションを表示する

ステータスバーにはグラデーションが表示できないのでステータスバーの裏にあるWindowにグラデーションを表示します。

2.ステータスバーを透明にする

ステータスバーを透明にすると裏のWindowのグラデーションが表示されあたかもステータスバーにグラデーションが表示されているように見えます。

3.Activityに背景色を定義する

デフォルトではActivityは透明になっているので何も背景色を設定しない場合はWindowに設定したグラデーションが表示されてしまうのでAcitivityには背景色を定義しましょう!

ステータスバーを非表示にする

ステータスバーは非表示にする事も可能です!

// ステータスバーを非表示にする
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
// ステータスバーを非表示にする
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN

最後に

いかがでしたでしょうか

グラデーション表示がゴリ押し実装なので他の方はどういった実装をしているのか気になります。

他に良い方法があればコメントお待ちしております!

コメント

タイトルとURLをコピーしました