android:nextFocusForward是错误的EditText

时间:2014-10-18 20:49:31

标签: android android-layout

我正在开发一个Android项目,我正在使用android:nextFocusButton,因此用户可以按下软键盘上的下一个按钮来移动EditText,而无需点击每个编辑文本来更改焦点。

在布局中,我要求用户的名字和姓氏,在水平线性布局中的单独EditText中

然后在下一行,在另一个线性布局中,我然后询问公司名称。下面是截图,显示我的意思。

Basic Screen Layout

我要做的是,在第一个名称编辑文本中,用户可以按下一个,然后应该将焦点切换到姓氏编辑文本,然后再按下一个并移动到公司编辑文本。

相反,正在发生的事情是,第一个名称有焦点,用户按下下一个按钮,然后它转到公司编辑文本而不是姓氏。

下面是我的XML布局的片段

<LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <EditText android:id="@+id/createAccount_txtFirstName"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:hint="@string/first_name"
                    android:singleLine="true"
                    android:inputType="textCapSentences"
                    android:nextFocusForward="@+id/createAccount_txtLastName"/>
                <EditText android:id="@+id/createAccount_txtLastName"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:hint="@string/last_name"
                    android:singleLine="true"
                    android:inputType="textCapSentences"
                    android:nextFocusForward="@+id/createAccount_txtCompanyName"/>
            </LinearLayout>
            <EditText android:id="@+id/createAccount_txtCompanyName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/company_name"
                android:singleLine="true"
                android:inputType="textCapSentences"
                android:nextFocusForward="@+id/createAccount_txtEmail"/>

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:8)

将其放在第一个edittext中。同时用 nextFocusDown

替换nextFocusForward
<EditText android:id="@+id/createAccount_txtFirstName"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:hint="@string/first_name"
                android:singleLine="true"
                android:inputType="textCapSentences"
                android:nextFocusDown="@+id/createAccount_txtLastName">
 <requestFocus />
</EditText>

在模拟器上运行此代码时似乎有问题。但是,它适用于手机

答案 1 :(得分:4)

Android焦点算法可能会忽略您的XML。文档说明如下:

  

在极少数情况下,默认算法可能与预期不匹配   开发者的行为。在这些情况下,您可以提供   显式覆盖布局中的以下XML属性   file:nextFocusDown,nextFocusLeft,nextFocusRight和nextFocusUp。

我有类似的问题,我使用 nextFocusDown 解决了这个问题。

更多关于official documentation

答案 2 :(得分:2)

除了侦听编辑器动作侦听器并以编程方式将焦点设置到下一个EditText之外,没有一个解决方案适合我。

    mFirstName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            mLastName.requestFocus();
            return true;
        }
    });