我在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 Reference说EditText
是正确的类型(View
)。
如果有比使用android:nextFocusXxx
属性更好的方法,包括在Java代码中执行此操作,那也没关系。
我不愿意使用LinearLayout
来解决这个问题。
另外,我是对的,“完成”按钮使用FOCUS_FORWARD
?
由于
解决方案:我需要使用@+id...
而不是@id
,因为我正在引用代码中稍后声明的对象;并且键盘似乎使用FOCUS_DOWN
而不是FOCUS_FORWARD
。
答案 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"
... />