你能在XML Layout中设置“Tab order”吗?

时间:2011-02-19 03:07:31

标签: android

我的平板电脑用户的软键盘上有一个标签键。我正在使用表视图,并在一行中有3个EditText字段,当前行下面有EditText字段。

当用户点击标签时,它会将它们带到下面的下一个字段,而不是右边的下一个字段。

布局中是否有一种方法可以设置Tab键顺序,还是仅以编程方式完成?

如果它只能用Java完成,那究竟是怎么做的?

感谢NextFocusRight提示,但它似乎没有用(或者我做错了)

这是我使用的代码。我必须添加imeoptions以使“下一个”按钮显示在我的模拟器中。你觉得我这样做有什么不对吗?

    <EditText 
android:id="@+id/bikeHHT"
android:layout_width="50dip"
android:layout_height="40dip"
android:textSize="14px"
android:maxLength="2"
android:nextFocusLeft="@+id/bikeMMT"
android:imeOptions="actionNext"
android:layout_column="1"/>
<EditText 
android:id="@+id/bikeMMT"
android:layout_width="50dip"
android:layout_height="40dip"
android:textSize="14px"
android:nextFocusRight="@+id/bikeSST"
android:imeOptions="actionNext"
android:maxLength="2"/>

7 个答案:

答案 0 :(得分:91)

android:nextFocusLeft替换为android:nextFocusDown。 “下一个”软键或TAB键正在寻找下一个“向下”焦点,而不是向左或向右。

答案 1 :(得分:38)

我还注意到你的参考:

android:nextFocusRight="@+id/bikeSST"

如果尚未定义该id,则需要“+”字符,如果您引用的元素可能在.xml文件中较低。

否则,如果它已经在上面定义(或包含),那么你可以省略“+”字符:

android:nextFocusRight="@id/bikeSST"

当您引用应该已存在的ID时不使用“+”的一个优点是IDE和Lint检查可以检测到错误情况:您指的是实际上的ID不存在

如果包含“+”,那么如果不存在则创建它,并且无法执行此检查。

答案 2 :(得分:10)

您是否检查了EditText的android:imeOptions="actionNext"属性?

它用虚拟键盘中的“下一步”替换回车键的名称,然后点击它 - 焦点跳转到下一个字段。

在你的布局中,你会做这样的事情

<EditText
    ...
    android:text="Field 1"
    android:imeOptions="actionNext" />
<EditText
    ...
    android:text="Field 2"
    android:imeOptions="actionNext" />

在Java中

TextView field2 = (TextView) field1.focusSearch(View.FOCUS_RIGHT);
field2.requestFocus();

由您决定下一个请求关注的字段。

答案 3 :(得分:9)

对我来说android:nextFocusUpandroid:nextFocusRightandroid:nextFocusDownandroid:nextFocusLeft无效,但android:nextFocusForward确实有效。

请参阅Supporting Keyboard Navigation, Handle Tab Navigation

答案 4 :(得分:4)

有一种更好的方法。您可以在布局中放置一个XML参数,以便在用户完成时自动将光标移动到每个EditText。这样可以更轻松地实现表单。

问题是,该死的生活还记得它到底是什么......

请务必查看android:nextFocus * xml属性。正常形式的行动是下降。但也许右边有一个按钮,你想要接下来的焦点(比如击中输入或者类似)。

http://developer.android.com/reference/android/view/View.html#attr_android:nextFocusDown

还有一些可用的编程选项:

http://developer.android.com/reference/android/view/View.html#setNextFocusDownId(int

答案 5 :(得分:3)

你可能正在寻找android:nextFocusRight,android:nextFocusLeft,android:nextFocusUp和android:nextFocusDown属性。如果tab键的默认行为是将焦点向下移动到第二行,那么我认为你可以将android:nextFocusDown设置为你想要获得焦点的视图的id。然后,当用户按Tab键时,它会将焦点移动到您指定的任何视图,即使在这种情况下它恰好位于当前视图的右侧,而不是在其下方。

答案 6 :(得分:1)

android:nextFocusLeft替换为android:nextFocusForward