EditText にテキストを入力した後、キーボードを非表示にする最良の方法を知りたいです。
1) setonfocuschangelistener : このリスナーは、完了ボタンが押されたとき、またはフォーカスが 1 つの EditText から別の EditText に変更されたときにのみ起動されますか? この方法を使用すると、キーボードを非表示にできませんでした。
2) setOnTouchListener : これを使用すると、キーボードを非表示にできましたが、これに問題があるとは思えません。この場合、タッチ リスナーをルート LinearLayout に追加します。私が使用した次のコード:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
txtUserName = (EditText)findViewById(R.id.txtUserName);
btnLogin = (Button)findViewById(R.id.btnLogin);
layoutView = (LinearLayout)findViewById(R.id.li);
layoutView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(txtUserName
.getWindowToken(), 0);
return true;
}
});
}
メインの LinearLayout 内では、他の 2 つの LinearLayout を使用しています。上記のコードで直面した問題は、押したときにキーボードが非表示にならないことです。私の疑問は、ルートレイアウトのみでタッチリスナーを追加していて、他の内部レイアウトまたは他のコントロール(TextView)でタッチリスナーを提供していないことです。他のコントロールまたは TextView の周りのいくつかのポイント (つまり、内部レイアウト) に触れると、キーボードが非表示になりません。
つまり、ルート レイアウト内のすべてのレイアウトまたはコントロールに touchListener を追加する必要がありますか? この状況をより良い方法で処理するにはどうすればよいでしょうか?