キーボード表示制御について
画面上にEditTextを配置してアプリを起動すると、真っ先にキーボードが表示される場合や
いったんEditTextにフォーカスを移動してキーボードで入力後にフォーカスを外しても
キーボードが表示されたままになるなど、キーボード表示操作はややこしいうえに
結構使用する頻度が高いため、一度整理しておきます。
起動時にキーボードを表示したくない!案1
Activityクラスの、onCreateメソッド内のsetContentView(****);の前に下記の内容を追記。
this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
これで、起動時にキーボードが表示されなくなります。
渡す引数の値によって動作が違います。下記を参考にしてください。
●LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
ウインドウがフォーカスされたときに常にキーボードを隠す。
●LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
ウインドウがフォーカスされたときに常にキーボードを表示する。
●LayoutParams.SOFT_INPUT_STATE_HIDDEN
ユーザ操作によって適切にキーボードを隠す。
●LayoutParams.SOFT_INPUT_STATE_VISIBLE
ユーザ操作によって適切にキーボードを表示する。
起動時にキーボードを表示したくない!案2
画面上にダミーのテキストボックスを配置してそのテキストボックスに初期フォーカスがあたるようにを設定しておきます。
android:focusable="true"
android:focusableInTouchMode="true"
上記の属性をダミーのテキストに設定して
そのテキストのサイズを0などにして画面上から見えなくします
あんまりスマートな方法ではないですね((笑)
EditTextフォーカスが外れたらキーボードを隠したい
まずOnFocusChangeListenerをオーバーライドしてください。setOnFocusChangeイベント発生時に下記の内容を追記してください。
キーボードを閉じる
inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(),0);
キーボードを表示する
inputMethodManager.showSoftInput(v, InputMethodManager.SHOW_FORCED);
サンプル
@Override
protected void onCreate(Bundle savedInstanceState) {
EditText editText = (EditText)findViewById(R.id.edit_text);
editText.setOnFocusChangeListener(this);
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO 自動生成されたメソッド・スタブ
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// フォーカスを受け取ったとき
if(hasFocus){
// ソフトキーボードを表示する
inputMethodManager.showSoftInput(v, InputMethodManager.SHOW_FORCED);
}
// フォーカスが外れたとき
else{
// ソフトキーボードを閉じる
inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(),0);
}
}
カテゴリーへ