ステータスバーとタイトルバーに大きさを表示する。
現行では、ステータスバーやタイトルバーの大きさを取得する簡便な方法がありません。
従来の方法
ネットでは、下記のように計算する方法が紹介されています。
Rect rect= new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight= rect.top;
int contentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight = contentViewTop - statusBarHeight;
if(titleBarHeight < 0){
titleBarHeight = 0;
}
従来の方法の問題点
しかし、この方法では、正しく計算できない場合があります。
下記の4つのケースがあります。
(1) ステータスバーとタイトルバーが表示されている。
(2) ステータスバーだけが表示されている。
(3) タイトルバーだけが表示されている。
(4) ステータスバーとタイトルバーが両方とも非表示である。
S: ステータスバー
T: タイトルバー
R: rect のビュー
C: ID_ANDROID_CONTENT のビュー
灰色: ステータスバーとタイトルバーを除いた領域
rect は 装飾物 (screen decorations) を除いた全面的な表示サイズ(the overall visible display size) のようです。
これは4つのケースにおいて、同じ値が取得されます。
ID_ANDROID_CONTENT は、ステータスバーとタイトルバーを除いた画面 (図の灰色) のはずです。
しかし、2のケースでは、そうなりません。
また、2と4のケースでは、rect と ID_ANDROID_CONTENT は同じ値です。
この2つの値からだけでは、2と4のケースが区別できません。
今回の方法
そこで、さらに2つの値を取得することにします。
1) 灰色の領域を、最上位の LinearLayout から取得します。
2) タイトルバーの有無を R.id.title から取得します。
R.id.title はタイトルバーのテキスト領域です。
タイトルバーの高さは 38px ですが、35px と少し小さい値が取得されます。
これらを組みわせると、4つのケースにおいて、
ステータスバーとタイトルバーの大きさが計算できます。
ソースは code.google に置いています。
ステータスバー と タイトルバー を非表示にする
ステータスバーとタイトルバーを非表示にするのは、Java でも、AndroidManifest でも設定できます。
Java では。
タイトルバーを非表示にする
requestWindowFeature(Window.FEATURE_NO_TITLE);
ステータスバーを非表示にする
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
AndroidManifest では。
タイトルバーを非表示にする
android:theme="@android:style/Theme.NoTitleBar"
ステータスバーとタイトルバーを非表示にする
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
ステータスバーを非表示にするのは、下記かと思ったが、これはエラーになります。
android:theme="@android:style/Theme.Fullscreen"
参考
・Getting Height of Status and Title Bar
・ステータスバーの高さを取得する方法
・Activityのビュー階層とコンテンツルート(View)を取得する
・reference: getWindowVisibleDisplayFrame
・reference: ID_ANDROID_CONTENT
・reference: R.id.title
・reference: Theme_NoTitleBar_Fullscreen
・reference: FEATURE_NO_TITLE
・reference: FLAG_FULLSCREEN












