「キーボードを閉じる」

キーボードを閉じる処理は、このブログで何度も書いている。
http://blog.zaq.ne.jp/oboe2uran/article/788/
http://blog.zaq.ne.jp/oboe2uran/article/785/
http://blog.zaq.ne.jp/oboe2uran/article/739/
http://blog.zaq.ne.jp/oboe2uran/article/848/

それでも、再びここにメモとして書く。

キーボードを閉じるには、InputMethodManagerhideSoftInputFromWindow を実行するか、
android.view.Window で、setSoftInputMode で隠すように指定するかどちらかで行う。


後者の方は簡潔で、

 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

で済む。
InputMethodManager の方法は、表示している任意の View を指定して、

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);


あるいは、何等かのアクションでは、 InputMethodManager.RESULT_UNCHANGED_SHOWN を指定する。


// EditText でキー入力後の [Done]キー押下、[ENTER]押下でソフトキーボードを閉じる場合

final EditText editText = (EditText)findViewById(R.id.editText);
editText.setOnKeyListener(new View.OnKeyListener(){
   @Override
   public boolean onKey(View v, int keyCode, KeyEvent event){
      if (event.getAction()==KeyEvent.ACTION_DOWN && keyCode==KeyEvent.KEYCODE_ENTER){
         InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
         imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
         return true;
      }
      return false;
   }
});

しかし、android.widget.NumberPicker で数字をタッチしてキーボードが表示されないようにする方法が見つからない