53

実行時にデバイスに表示される仮想キーボードの高さを Android で取得する方法はありますか? 実際には、キーボードの上にテキスト ボックスを表示したいと考えています。

4

13 に答える 13

54

これを解決するために、フローティング ソフト キーボードの高さを計算できる keyboardHeightProvider を作成しました。Activity は、AndroidManifest.xml でadjustNoneまたはadjustPanに設定できます。

https://github.com/siebeprojects/samples-keyboardheight

シーベ

于 2016-12-08T09:27:43.243 に答える
46

これについて多くの提案された方法を試しましたが、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
    }
    });
于 2015-01-22T19:07:49.773 に答える
36

はい、Viewtree Observer とグローバル レイアウト リスナーの助けを借りて、以下の手順を試してください。

  1. レイアウトのルート ビューを取得する
  2. このルートの 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.  
        }
  });

よろしく、テックフィスト

于 2013-05-28T10:06:46.670 に答える
8

テキストボックスを親の下に置きます。

android:layout_alignParentBottom="true"

そしてマニフェストファイルでソフト入力を行いますadjustresize

android:windowSoftInputMode="adjustResize"

キーボードが表示されると、テキスト ボックスが上に移動します。

于 2013-05-28T09:55:17.557 に答える
7

わかりません。いいえ、本当に、あなたにはわかりません。

キーボードは特定の形状である必要はありません。画面の下部に配置する必要はありません (最も一般的なオプションの多くはそうではありません)、テキスト フィールドを変更するときに現在のサイズを維持する必要はありません (フラグによっては、ほとんど何もしません)。長方形である必要さえありません。画面全体を占有することもあります。

(同様の質問、ソフトキーボードの寸法の取得に関する私の回答のコピー)

于 2016-01-29T01:18:31.973 に答える