【问题标题】:Can you set "tab order" in XML Layout?您可以在 XML 布局中设置“标签顺序”吗?
【发布时间】:2011-02-19 03:07:30
【问题描述】:

我有一些平板电脑用户的软键盘上有一个 Tab 键。我正在使用表格视图,并且在一行中有 3 个 EditText 字段,其中 EditText 字段位于当前行下方。

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

布局中有没有办法设置标签顺序,还是仅以编程方式完成?

如果只能用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"/>

【问题讨论】:

    标签: android


    【解决方案1】:

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

    【讨论】:

    • 谢谢,就是这样!欣赏它。
    • 那么当使用/调用 nextFocusLeft 和 -Right 时?
    • 我想它们是由左/右方向键调用的。
    • Left 和 Right 似乎只在 RelativeLayout 内部起作用,否则不会自动明确焦点方向,而 LinearLayout 无论方向如何都只有一个方向。
    • 乍一看,nextFocusForward 似乎是下一个软按钮所在的位置。令人惊讶的是,它实际上是 nextFocusDown。
    【解决方案2】:

    我还注意到在您的参考中:

    android:nextFocusRight="@+id/bikeSST"
    

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

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

    android:nextFocusRight="@id/bikeSST"
    

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

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

    【讨论】:

    • 当您引用一个 应该 存在于别处的 ID 时,不使用“+”的另一个优点是 IDE 和 Lint 检查可以检测到错误情况 - 您指的是实际上不存在的ID。如果您输入“+”,那么您正在创建它,如果它不存在并且无法执行此检查。
    • 所以我猜@+id 使用这种方式有点像前向声明。无论如何,使用+id 似乎是在LinearLayout 中使用nextFocusRight 的唯一方法。
    • @trooper 是的,我也是这么想的。它允许您在声明之前使用引用(按照文件的解析顺序)。
    【解决方案3】:

    对我来说,android:nextFocusUpandroid:nextFocusRightandroid:nextFocusDownandroid:nextFocusLeft 不起作用,但 android:nextFocusForward 起作用了。

    Supporting Keyboard Navigation, Handle Tab Navigation

    【讨论】:

      【解决方案4】:

      您是否检查了 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();
      

      由您决定下一个请求焦点的字段。

      【讨论】:

      • 谢谢,如果我无法让 NextFocusRight 工作,我将不得不使用它,但为了修复标签顺序而必须添加代码似乎很痛苦。
      【解决方案5】:

      有更好的方法。您可以在布局中添加一个 XML 参数,当用户完成它们时,它会自动将光标移过每个 EditText。这样可以更轻松地实现表单。

      问题是,该死的生活记住它是什么鬼......

      请务必查看 android:nextFocus* xml 属性。正常形式的动作是下降。但也许右侧有一个按钮,您希望获得下一个焦点(例如按 Enter 或类似键)。

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

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 我编辑了我的原始帖子以显示我正在使用的代码,我尝试了 NextFocusRight,但它似乎没有做任何事情,你看看它是否正确?
        【解决方案7】:

        android:nextFocusLeft 替换为android:nextFocusForward

        【讨论】:

          猜你喜欢
          • 2020-10-24
          • 2012-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多