我在一个活动中使用了4个EditText
字段和2个下拉框。这些组件的顺序是2个EditText
,然后2个下拉框,最后是2个EditText
字段。
问题出现在当我使用软键盘“下一步”按钮从EditText
转移到下拉框时,下拉框无法获得焦点,焦点被转移到了在下拉框之后放置的下一个EditText
字段。
我已经在下拉框上使用了requestfocus(),但它没有起作用。
我该如何确保下拉框获得焦点?
我成功找到了一个解决方案,而不是重新定位我的Spinner。在EditText之前加入以下监听器:
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
private void hideKeyboard() {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
希望我能够在这个棘手的问题中提供帮助。
可以在文档中找到标记InputMethodManager.HIDE_NOT_ALWAYS
。
android:imeOptions="actionNext"
。 - Vishal Yadav谢谢,我已经通过以下方法解决了问题:
onCreate
方法内),以确保我的代码首先被执行。我使用了以下代码:
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
s1.setFocusable(true);
s1.setFocusableInTouchMode(true);
s1.requestFocus();
http://developer.android.com/reference/android/view/View.html#attr_android:focusable
编辑:另外,查看这个问题:无法请求焦点Spinner
我之前也遇到了同样的问题。我使用了nextFocusDown/Up/Left/Right属性来解决它。
<EditText
android:id="@+id/tPhone"
...
android:focusableInTouchMode="true"
android:focusable="true"
android:nextFocusDown="@+id/sCountry"/>
<Spinner
android:id="@+id/sCountry"
....
android:focusableInTouchMode="true"
android:focusable="true"
android:nextFocusUp = "@+id/tPhone"
android:nextFocusDown="@+id/tStreet"/>
<EditText
android:id="@+id/tStreet"
...
android:visibility="gone"
android:focusableInTouchMode="true"
android:focusable="true"
android:nextFocusUp = "@+id/sCountry"/>
但为什么这甚至是必要的...超出了我的理解。