Androidは、仮想/画面上のボタンがあるデバイスで下部の100ピクセルを切り取っているようです。現在の携帯電話/タブレットが画面上のボタンを使用しているかどうかを検出して、不足しているスペースを把握することはできますか?もしそうなら、ボタンの高さも取得することは可能ですか?
2 に答える
を使用して、デバイスに永続的な (ハードウェア) メニュー ボタンがあるかどうかを確認できますhasPermanentMenuKey()
。次のように使用できます。
boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();
この手法は、API 14 以降 (ICS、JB) でのみ機能することに注意してください。API-11 より前のデバイスにはメニュー ボタンがないため、API 11 ~ 13 のみをチェックせずに残します。これら 3 つの API レベルは、現在Android 人口の 2.3%しかないことに注意してください。
代わりに (確実ではありませんが)、D-Pad を検索してみてください:
boolean hasDpad = getResources().getConfiguration().naviation == Configuration.NAVIGATION_DPAD;
hereのように、ハードウェア検索ボタンを確認する方法はありません (ホーム/バックも想定しています)。(ここでも。このスレッドは別の方法を提案していますが、あなたの場合にうまくいくかどうかはわかりません。)
仮想ボタンがコンテンツを覆ってはいけません。これらはデバイス ウィンドウの高さ (ディスプレイのメトリックによって取得される) から差し引かれますが、高さとして使用している場合、レイアウトを妨げることはありませんmatch_parent
。次に、仮想ボタン バーの正確な高さを取得する方法がありません。ビルド間で変更される場合があります。Android API には、「利用可能な」画面スペース (下部のバーでカバーされていない領域) を取得するためのネイティブな方法もありません。
だから、ここに私が提案するものがあります:
- ハードウェア ボタンのチェックは忘れてください。どれだけのスペースを失っているか (またはなぜそれを失っているのか) ではなく、自分がどれだけのスペースを持っているかだけを気にする必要があります。
- カスタム レイアウト タイプを作成します(拡張
ViewGroup
などLinearLayout
)。 - このレイアウトで既存のレイアウトをラップします。
onLayout()
[ ]( http://developer.android.com/reference/android/widget/LinearLayout.html#onLayout(boolean , int, int, int, int)) またはをオーバーライドして、これからonMeasure()
レイアウトの正確な高さを取得できるようになりました. (参考にしてみてはいかがでしょうか。)
私が覚えていることから、下部の仮想ボタンは android バージョン 3.0 (Honeycomb) 以降にのみあります。高さの問題に関しては、私は実際に調べたことはありません。