为什么Eclipse不接受nextFocusForward中的有效Android ID?

时间:2014-02-09 02:47:24

标签: android xml eclipse android-layout

我在RelativeLayout中有一些EditText视图。第一个正确地获得焦点,但是当用户在键盘上单击“完成”时,它通常不会将焦点发送到用户期望的视图。假设“完成”按钮使用FOCUS_FORWARD ID,我尝试使用android:nextFocusForward属性修复此行为,如下所示:

<EditText
    android:id="@+id/editTextName"
    ...
    android:nextFocusForward="@id/editTextNameColour" >
    <requestFocus />
</EditText>

<EditText
    android:id="@+id/editTextNameColour"
    ...
    android:nextFocusForward="@id/editTextBackgroundColour" />

<EditText
    android:id="@+id/editTextBackgroundColour"
    ... />

它没有编译,因为Eclipse给我一个错误消息,如:“错误:错误:找不到与给定名称匹配的资源(在'nextFocusForward',值为'@id / editTextNameColour')”。

我知道名称是正确的,因为我从Eclipse的下拉列表中选择了它,并且所有文件都已保存。

Android Developers ReferenceEditText是正确的类型(View)。

如果有比使用android:nextFocusXxx属性更好的方法,包括在Java代码中执行此操作,那也没关系。

我不愿意使用LinearLayout来解决这个问题。

另外,我是对的,“完成”按钮使用FOCUS_FORWARD

由于

解决方案:我需要使用@+id...而不是@id,因为我正在引用代码中稍后声明的对象;并且键盘似乎使用FOCUS_DOWN而不是FOCUS_FORWARD

2 个答案:

答案 0 :(得分:8)

这是因为@id vs @ + id。只需使用@ + id。您在为其分配资源之前尝试使用ID。你也可以切换你声明东西的顺序,如果它在relativeLayout中。

答案 1 :(得分:0)

如果这是订单,那么您正在引用尚未定义的元素。你应该做点什么:

<EditText
    android:id="@+id/editTextName"
    ...
    android:nextFocusForward="@+id/editTextNameColour" >
    <requestFocus />
</EditText>

<EditText
    android:id="@+id/editTextNameColour"
    ...
    android:nextFocusForward="@+id/editTextBackgroundColour" />

<EditText
    android:id="@+id/editTextBackgroundColour"
    ... />