私は現在、Android用のOpenGLアプリを開発しています。これまでのところすべて正常に動作していますが、ナビゲーションバーは少し邪魔です...
ナビゲーションバーが横向きのときの私の銀河のネクサスのように右側にあるのか、タブレットのように下部にあるのかを確認する方法はありますか?さらに、ナビゲーションバーの高さと幅が必要です。
誰かが私がこれを達成する方法を知っていますか?
ありがとう
私は現在、Android用のOpenGLアプリを開発しています。これまでのところすべて正常に動作していますが、ナビゲーションバーは少し邪魔です...
ナビゲーションバーが横向きのときの私の銀河のネクサスのように右側にあるのか、タブレットのように下部にあるのかを確認する方法はありますか?さらに、ナビゲーションバーの高さと幅が必要です。
誰かが私がこれを達成する方法を知っていますか?
ありがとう
私は自分の問題の解決策を見つけました:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
width = size.x;
height = size.y;
コードのこの部分の後、幅と高さには、ナビゲーションバーまたは通知バーを含まない高さと幅が含まれます。
私はこのようにそれをしました:
boolean hasMenuKey = ViewConfiguration.get(getApplicationContext())
.hasPermanentMenuKey();
//メニューキーがない場合はナビゲーションバーがあります
if (!hasMenuKey && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
if (dm.heightPixels%10!=0) {
//navigation bar is on bottom
} else {
//navigation bar is on right side
}
}
ナビゲーションバーとステータスバーをエレガントに処理する方法を探している人のために、ここに投稿してください。
この投稿を参照してください。
同様の質問の多くで示唆されているように、たとえば、 this、this、this、thisは、ナビゲーションバーの高さを取得するだけでは不十分な場合があります。1.ナビゲーションバーが存在するか、2。下部にあるか、右または左にあるか、3。アプリがマルチウィンドウモードで開いているかどうかを検討する必要があります。
シンプルなワンラインソリューションがあります
android:fitsSystemWindows="true"
またはプログラムで
findViewById(R.id.your_root_view).setFitsSystemWindows(true);
ルートビューを取得することもできます
findViewById(android.R.id.content).getRootView();
or
getWindow().getDecorView().findViewById(android.R.id.content)
ルートビューの取得の詳細については、https://stackoverflow.com/a/4488149/9640177を参照してください