我在一项活动中使用了4个EditText
字段和2个微调器。这些组件的顺序为2 EditText
,然后是2个微调器,然后是2个EditText
字段。
当我将焦点(在软键盘下一个按钮的帮助下)从EditText
转移到微调器时出现问题,微调器没有得到焦点,焦点转移到下一个EditText
字段被放在纺纱厂之后。
我在spinner上使用了requestfocus(),但它没有用。
如何确保微调器获得焦点?
答案 0 :(得分:39)
我设法找到一个解决方案,然后重新定位我的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
我的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
可以是found in the documentation。
答案 1 :(得分:19)
谢谢,我通过以下方式解决了问题:
onCreate
方法内),以确保我的代码首先执行我使用了以下内容:
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
s1.setFocusable(true);
s1.setFocusableInTouchMode(true);
s1.requestFocus();
答案 2 :(得分:6)
这是一个黑暗的镜头,但尝试将可聚焦属性(在XML或代码中;无论你采用什么方式)设置为在微调器上为true。
http://developer.android.com/reference/android/view/View.html#attr_android:focusable
编辑:另外,请看这个问题:Can't manage to requestFocus a Spinner
答案 3 :(得分:-1)
我遇到了同样的问题。我使用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"/>
但为什么这甚至是必要的......打败我。