2012-06-22 54 views
19

我刚开始使用android,并有大约5个布局文件完成。但是,我只是意识到我一直在使用@id和@ + id,但我不确定两者之间的确切区别。@id和@ + id有什么区别?

回答

37

当您为视图定义自己的ID时,您需要使用@+id

文档

没错:

将在符号的字符串的开头(@)表示 XML解析器应该解析和扩展ID字符串的其余部分和 将其识别为一个ID资源。加号(+)表示这是 必须创建并添加到我们的资源 (在R.java文件中)的新资源名称。 Android框架提供了许多其他ID资源。当引用Android 资源ID时,您不需要加号,但必须添加android名称空间。

,现在我加你实际的例子:

<Button 
    android:id="@+id/start" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
/> 

<Button 
    android:id="@+id/check" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/start" 
/> 

所以在这里,您创建了两个IDs,启动和检查。然后,在您的应用程序中,您可以使用findViewById(R.id.start)连接到它们。

android:layout_below="@id/start"指现有id.start并意味着你Button与ID 检查将被定位低于Button与ID 开始

+0

好的,谢谢,这是否意味着我可以在任何时候使用@ + id而没有问题? – JuiCe

+0

是的,当你想创建新的唯一ID时,只需使用@ + id就像文档所表示的那样。 – Sajmon

+1

@Sajmon当我使用android:layout_below =“@ + id/start”而不是android:layout_below =“@ id/start”时,它会创建问题。或者它可以在很长一段时间后产生问题? – Bora

0

机器人:ID = “@ + ID/my_button”

+ ID加唱告诉机器人添加或创建资源的新ID。

机器人:layout_below = “@ ID/my_button”

它只是帮助指已经生成的ID ..

1

有时你必须使用+号。例如。当您使用<include ... />和所包含的文件看起来像这样:

Error:(9, 24) No resource found that matches the given name (at 'layout_anchor' with value '@id/view_pager'). 

它的发生给我我的项目:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.FloatingActionButton xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    (...) 
    app:layout_anchor="@+id/view_pager" 
    app:layout_anchorGravity="top|right|end" 
/> 

如果你不"@+id/view_pager"添加+同时建设的项目,你会得到错误与图书馆。

0

为了访问Java中的小部件(或组件)或使其他人依赖它,我们需要一个唯一的值来表示它。该唯一值由android:id属性提供,它实质上将作为后缀提供的id作为@ + id /添加到id资源文件供其他人查询。对于工具栏的ID可以这样定义,

android:id=”@+id/toolbar 

随后的ID现在可以通过findViewById(...)看起来它在res文件的ID,或者干脆R.id目录,并返回类型进行跟踪有问题的视图。 另一个@id的行为与findViewById(...)相同 - 通过提供的id查找组件,但仅保留用于布局。它最常用的用法是将一个组件放入它返回的组件中。

android:layout_below=”@id/toolbar” 
相关问题