2012年8月1日水曜日

Androidでキーボードが表示された時のイベントを発生させる

Androidにはソフトウェアキーボードの表示/非表示のを検出するようなイベントは用意されていない。
調べてみると、ソフトウェアキーボードが表示された時に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 件のコメント:

コメントを投稿