実行時にデバイスに表示される仮想キーボードの高さを Android で取得する方法はありますか? 実際には、キーボードの上にテキスト ボックスを表示したいと考えています。
13 に答える
これを解決するために、フローティング ソフト キーボードの高さを計算できる keyboardHeightProvider を作成しました。Activity は、AndroidManifest.xml でadjustNoneまたはadjustPanに設定できます。
https://github.com/siebeprojects/samples-keyboardheight
シーベ
これについて多くの提案された方法を試しましたが、Android SDL ではうまくいかなかったようです。これは、SDL ディスプレイが「フルスクリーン」であるか、「AbsoluteLayout」内にあるため、「ビュー」の高さが実際には変化しないためだと思います。この方法は私のために働いた:
Window mRootWindow = getWindow();
View mRootView = mRootWindow.getDecorView().findViewById(android.R.id.content);
mRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout(){
Rect r = new Rect();
View view = mRootWindow.getDecorView();
view.getWindowVisibleDisplayFrame(r);
// r.left, r.top, r.right, r.bottom
}
});
はい、Viewtree Observer とグローバル レイアウト リスナーの助けを借りて、以下の手順を試してください。
- レイアウトのルート ビューを取得する
- このルートの Viewtree オブザーバーを取得し、その上にグローバル レイアウト リスナーを追加します。
これで、ソフト キーボードが表示されるたびに、Android が画面のサイズを変更し、リスナーに電話がかかります。サイズ変更後のルートビューの高さと元のサイズの差を計算するだけです。差が 150 を超える場合は、キーボードが膨らんでいると考えてください。
以下はサンプルコードです
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){
public void onGlobalLayout(){
int heightDiff = root.getRootView().getHeight()- root.getHeight();
// IF height diff is more then 150, consider keyboard as visible.
}
});
よろしく、テックフィスト
テキストボックスを親の下に置きます。
android:layout_alignParentBottom="true"
そしてマニフェストファイルでソフト入力を行いますadjustresize
android:windowSoftInputMode="adjustResize"
キーボードが表示されると、テキスト ボックスが上に移動します。