Spinner没有得到关注

时间:2011-06-22 16:20:30

标签: android focus spinner

我在一项活动中使用了4个EditText字段和2个微调器。这些组件的顺序为2 EditText,然后是2个微调器,然后是2个EditText字段。

当我将焦点(在软键盘下一个按钮的帮助下)从EditText转移到微调器时出现问题,微调器没有得到焦点,焦点转移到下一个EditText字段被放在纺纱厂之后。

我在spinner上使用了requestfocus(),但它没有用。

如何确保微调器获得焦点?

4 个答案:

答案 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)

谢谢,我通过以下方式解决了问题:

  1. 我将Spinner对象置于顶部(onCreate方法内),以确保我的代码首先执行
  2. 我使用了以下内容:

    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"/>

但为什么这甚至是必要的......打败我。