アクティビティで4つのEditText
フィールドと2つのスピナーを使用しています。これらのコンポーネントの順序は、2 EditText
、2つのスピナー、2つのEditText
の順になります。
(ソフトキーボードの[次へ]ボタンを使用して)フォーカスをEditText
からスピナーに転送すると、問題が発生します。スピナーはフォーカスを取得せず、フォーカスは次のEditText
フィールドに転送されますスピナーの後に配置されます。
スピナーでrequestfocus()を使用しましたが、機能しませんでした。
スピナーが確実にフォーカスされるようにするにはどうすればよいですか?
私はなんとかしてスピナーを再配置する以外の解決策を見つけました。 EditTextbeforeスピナーに、次のリスナーを追加します。
editTextBefore.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_NEXT) {
hideKeyboard();
textView.clearFocus();
spinner.requestFocus();
spinner.performClick();
}
return true;
}
});
また、フォーカスを取得するには、これらの行をスピナーに追加する必要があります。
spinner.setFocusable(true); // can be done in XML preferrable
私のhideKeyboard関数は、キーボードを非表示にするために追加したい視覚的な詳細でした:
private void hideKeyboard() {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
私はこのトリッキーな質問を手伝ってくれたことを願っています。
フラグInputMethodManager.HIDE_NOT_ALWAYS
は ドキュメントにあります です。
おかげで、私は次のようにして解決しました:
onCreate
メソッド内で)上に設定しました私は以下を使用しました:
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
s1.setFocusable(true);
s1.setFocusableInTouchMode(true);
s1.requestFocus();
これは暗闇の中でのショットですが、スピナーでfocusableプロパティを(XMLまたはコードで、どのように行っていても)trueに設定してみてください。
http://developer.Android.com/reference/Android/view/View.html#attr_Android:focusable
編集:また、この質問を参照してください: リクエストフォーカススピナーを管理できません