調べてみると、ソフトウェアキーボードが表示された時にActivityのサイズが変わることを使ってそのON/OFFを検知するのが一般的なようだ。
ありがたいことに、以下のページで、ソフトキーボードの表示/非表示を検出するクラス(DetectableKeyboardEventLayoutクラス)が公開されている。
Android のソフトウェアキーボード表示・非表示を検出する
このDetectableKeyboardEventLayoutクラスはLinearLayoutを継承しているので、キーボードのON/OFFを検知するクラスのレイアウトのルートにこのクラスを挿入してやれば簡単にキーボード表示/非表示時のイベントを取得できる。
<package.DetectableKeyboardEventLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/root" > <!-- main layout --> </package.DetectableKeyboardEventLayout>
DetectableKeyboardEventLayout root = (DetectableKeyboardEventLayout)findViewById(R.id.root); root.setKeyboardListener( new KeyboardListener() { @Override public void onKeyboardShown() { Log.d(TAG, "keyboard shown"); } @Override public void onKeyboardHidden() { Log.d(TAG, "keyboard hidden"); } });
0 件のコメント:
コメントを投稿