android ソフトキーボードを非表示にする
今回は、androidのソフトキーボードを非表示にする方法を書きます。
ちなみに、ソフトキーボードというのは、こういうやつのことです↓
文字を入力するときに出てくるキーボードです。
このソフトキーボードを非表示にしたい時があると思います。
例えば、ボタンが押された時やN文字入力された時などなど・・・。
では、ソフトキーボードを非表示にする方法を書いていきます。
やり方は、とても簡単です。こんな感じにやります↓↓
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
これだけで、ソフトキーボードを非表示にできます。
上のコードを少し詳しく書くと、InputMethodManagerを取得して、hideSoftInputFromWindowメソッドを呼び出しています。
上のコードを使って、edittextに4文字入力されたら、ソフトキーボードを非表示にするプログラムを書きます。
public class MainActivity extends Activity implements TextWatcher { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EditText edittext = (EditText)findViewById(R.id.edittext); edittext.addTextChangedListener(this); } @Override public void beforeTextChanged(CharSequence s, int start, int count,int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { /*--- 追加 ---*/ if(s.toString().length() == 4){ // ソフトキーボードを非表示にする InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); Toast.makeText(this, "非表示", Toast.LENGTH_LONG).show(); } /*--- 追加 ---*/ } }
<EditText android:id="@+id/edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" />
実行結果
TextWatcherを使って、文字数を調べています。そして4文字になるとソフトキーボードが非表示になるようになっています。
さらに、edittextのフォーカスが外れた時にソフトキーボードが非表示になるプログラムも書きます。
public class MainActivity extends Activity implements TextWatcher { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EditText edittext = (EditText)findViewById(R.id.edittext); edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { // EditTextのフォーカスが外れた場合 if (hasFocus == false) { //ソフトキーボード非表示 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } }); } public void nya(View v){ // ボタン押下時の処理 Button button = (Button) findViewById(R.id.button); //フォーカスをボタンに移動 button.setFocusable(true); button.setFocusableInTouchMode(true); button.requestFocus(); } }
<EditText android:id="@+id/edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ぼたん" android:onClick="nya" />
実行結果
ボタンが押されたらフォーカスが移動するようにしています。フォーカスが外れたらソフトキーボードは非表示なります。
以上で、終わります。