我正在开发一个Android项目,我正在使用android:nextFocusButton
,因此用户可以按下软键盘上的下一个按钮来移动EditText,而无需点击每个编辑文本来更改焦点。
在布局中,我要求用户的名字和姓氏,在水平线性布局中的单独EditText中
然后在下一行,在另一个线性布局中,我然后询问公司名称。下面是截图,显示我的意思。
我要做的是,在第一个名称编辑文本中,用户可以按下一个,然后应该将焦点切换到姓氏编辑文本,然后再按下一个并移动到公司编辑文本。
相反,正在发生的事情是,第一个名称有焦点,用户按下下一个按钮,然后它转到公司编辑文本而不是姓氏。
下面是我的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"/>
感谢您提供的任何帮助。
答案 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 解决了这个问题。
答案 2 :(得分:2)
除了侦听编辑器动作侦听器并以编程方式将焦点设置到下一个EditText之外,没有一个解决方案适合我。
mFirstName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
mLastName.requestFocus();
return true;
}
});