くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Androidのソフトウェアキーボードをあれこれする

Androidアプリを開発していて、ソフトウェアキーボード関連についてあれこれ調べたので、その備忘録。

動作確認は、Android.4.4でやりましたー

起動時にキーボードを表示しないようにする

AndroidManifest.xmlのみで指定できるらしい。 <activity>の属性にandroid:windowSoftInputMode="stateAlwaysHidden"をしてすれば、 EditTextに勝手にフォーカスされてキーボードが開かれなくなる。

<manifest ... >
    <application
        ... >
        ...
        <activity
            android:name="hoge.MyActivity"
            android:windowSoftInputMode="stateAlwaysHidden" >
        </activity>
    </application>
</manifest>

キーボードの完了を検索っぽいアイコンにする

キーボードで文字を入力し終わって、エンターキーを検索っぽいアイコンとかにしたくなる。

そんなときは、EditTextandroid:imeOptions="actionSearch"を追加すればOK

他にもアイコンを選べるらしいので、お好みで

<EditText
    android:id="@+id/search_word"
    android:layout_width="0dip"
    android:layout_height="48sp"
    android:layout_weight="4"
    android:hint="@string/msg_no_result"
    android:imeOptions="actionSearch"
    android:inputType="text" />

<com.beardedhen.androidbootstrap.BootstrapButton
    android:id="@+id/btn_search"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="検索" />

入力が完了したら、キーボードを閉じて処理する

キーボードの完了を検索っぽいアイコンに変えたので、ちゃんと検索できるようにしたい。 &いい感じにキーボードを閉じてほしい。

以下サンプル。検索ボタンが押されても、キーボードのエンターを押されても、同じように

  1. キーボードを閉じて、
  2. 検索する

という処理をしたいので、共通関数searchを呼び出すようにしている。

    @Override
    public void onStart() {
        super.onStart();
        ・・・
        mSearchBox = (EditText) getView().findViewById(R.id.search_word);
        mSearchBox.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // 検索っぽいアイコンが押された時(EnterキーのKeyEvent)、
                if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
                    search();
                    return true;
                }
                return false;
            }
        });

        getView().findViewById(R.id.btn_search).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                search();
            }
        });
    }

    private void search() {
        //キーボードを閉じる
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(mSearchBox.getWindowToken(), 0);

    //共通的な検索処理
        ・・・
    }

以上!!

[PR] めもらばではこんなあぷりを作っています!

参考にしたサイト様