素人プログラマ奮闘記

javaの初心者がAndroidのことを独学で勉強しつつ、メモを残していきます。

キーボード表示制御について

画面上に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);
         }

	}


カテゴリーへ

inserted by FC2 system