
以前の記事でフォーカスを初期状態で当てない方法をご紹介しました。
今回は、EditTextに記入をした後、ソフトキーボードを非表示にする方法です。
Backキーをタップすれば隠すこともできますが、あまりこれは良い方法ではありません。
以下のようにコードを記述します。
public class MainActivity extends AppCompatActivity {
private EditText editText;
private View view;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.editText);
button = (Button)findViewById(R.id.button);
view = this.getCurrentFocus(); // 1
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (view != null) {
editText.clearFocus();
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
});
}
}
1でフォーカスされているビューを取得します。
buttonをタップした際に、フォーカスされているビュー(この場合はEditTextになります)がnullではない場合に、ソフトキーボードを隠すという処理です。
これで目的通りになったかと思います。

もちろんViewを定義せずにif(editText != null)としても目的は達成できますが、この場合はEditViewが1つだけのときのみです。ですから今回は全てのスーパークラスであるViewを用いて記述しています。