Androidアプリを開発していて、ソフトウェアキーボード関連についてあれこれ調べたので、その備忘録。
動作確認は、Android.4.4でやりましたー
起動時にキーボードを表示しないようにする
AndroidManifest.xmlのみで指定できるらしい。
<activity>
の属性にandroid:windowSoftInputMode="stateAlwaysHidden"
をしてすれば、
EditTextに勝手にフォーカスされてキーボードが開かれなくなる。
<manifest ... > <application ... > ... <activity android:name="hoge.MyActivity" android:windowSoftInputMode="stateAlwaysHidden" > </activity> </application> </manifest>
キーボードの完了を検索っぽいアイコンにする
キーボードで文字を入力し終わって、エンターキーを検索っぽいアイコンとかにしたくなる。
そんなときは、EditText
にandroid: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="検索" />
入力が完了したら、キーボードを閉じて処理する
キーボードの完了を検索っぽいアイコンに変えたので、ちゃんと検索できるようにしたい。 &いい感じにキーボードを閉じてほしい。
以下サンプル。検索ボタンが押されても、キーボードのエンターを押されても、同じように
- キーボードを閉じて、
- 検索する
という処理をしたいので、共通関数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); //共通的な検索処理 ・・・ }
以上!!