調べてみると、ソフトウェアキーボードが表示された時に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 件のコメント:
コメントを投稿