通知バーの高さの取得

通知バーはアプリ通知などが表示される領域のことを言います。

下の画像のようにアプリの上部に表示されることが多いです。

通知バーが赤線で囲まれた画像

ここで、この通知バーの幅を知りたい場合は画面幅と同じなのですぐ分かります。

しかし、高さを直接取得する方法は(たぶん)ありません。

そこでアプリの画面上での一番上の座標を取得することで間接的に通知バーの高さを知ることができます。

方法はこうです。

class MainActivity extens Activity
{
    private statusBarHeight;
    
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.activity_main);
        
        View decorView = getWindow().getDecorView();
        
        decorView.getViewTreeObserver().addOnGlobalLayoutListener(
        new ViewTreeObserver.OnGlobalLayoutListener()
        {
            @Override
            public void onGlobalLayout()
            {
                Rect rect = new Rect();
                getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
                statusBarHeight = rect.top;
                Log.d("MainActivity", "通知バー高さ = " + statusBarHeight);
            }
        });
    }
}

getDecorViewメソッドでアプリのウインドウ全体を含めたビューを取得できます。

ウインドウはonCreateですぐに表示されないのでOnGlobalLayoutListenerを実装してレイアウトが変更されたときにウインドウの画面に対する高さから通知バーの高さを求めています。

ただし、この方法は通知バーが下側や横側についていたりした場合、高さは0になります。

重要なことは上方向にステータスバーがついているときだけこの方法が使えるということです。

以上、ステータスバーの高さの測り方でした。では、また!

関連項目
プライバシーポリシー