【问题标题】:When should you use `@+id` instead of `@id`?什么时候应该使用 `@+id` 而不是 `@id`?
【发布时间】:2012-01-12 19:45:48
【问题描述】:

我在<merge> 中有一堆Views,我将<merge> 包含在RelativeLayout 中。我尝试引用包含Views 的ID 作为我的其他Views 的锚点,但Eclipse 抱怨ID 没有解析。当我第一次引用它们而不是当我实际定义它们引用的对象时,我通过使用@+id 而不是@id 找到了一种解决方法。我已经在Style 和包含的<merge> 中定义了两个IDs,它们被声明的地方,所以如果我继续重复ID 的定义,感觉有点低效。

这是正确的做法吗?我假设这很糟糕,因为“+”是另一个初始化。我目前的假设是,您应该在第一次使用 ID 时使用@+id,而不是在初始化 ID 将要表示的对象时使用,有点像@ 987654333@ 以及它们如何在使用该函数的实际代码之前的行中至少需要一个函数原型。

我的另一个问题是,当您使用 Eclipse 的基于 GUI 的 UI 构建器时,我注意到他们总是使用 @+id 而不是 @id。这是可以接受的吗,因为它对我来说似乎效率低下;好像应用程序将花费更多时间来确定 ID 是否已在 R.id 中声明。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    使用@+id 格式告诉Android 资产编译器为您的元素分配一个ID,它实际上并不是一个ID 本身。因此,如果我使用@+id/myNewId,资产编译器将创建一个名为myNewId 的新ID,并为其提供一个编号。实际号码可以通过您的代码R.id.myNewId 访问。

    如果您使用@id,编译器将寻找R.id.id。您可以在 XML 文件中定义自己的 id,如下所述:http://developer.android.com/guide/topics/resources/more-resources.html#Id。您可以在res/values/[your_filename].xml 中创建自己的文件:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item
            type="id"
            name="id_name" />
    </resources>
    

    然后参考@id_name,例如

    您也可以使用在 Android 命名空间中定义的 Id:@android:id/empty

    这在 Android 文档中有很好的解释:http://developer.android.com/guide/topics/ui/declaring-layout.html#id

    这里还有一些进一步的讨论:android:id what is the plus sign for

    【讨论】:

    • 等等,我可以创建一个名为id的xml文件,在那里初始化我需要的所有ID,然后再也不用@+id了吗?
    • 我已经编辑解释如何,但没有理由,除非你想确保为两个不同的控件使用相同的 id(你永远不想在同一个视图上这样做) .我想@+id 是在早期的开发人员如此烦恼之后添加的约定,每当他们想向视图添加新的小部件时都必须在 id 的文件中添加每个 id。
    • 别着急,我看了文档;我只是想确认一下,但感谢您的额外努力!我的问题是,当我使用 mergeinclude 标签时,有时会遇到 eclipse 错误。不确定是adb 的错还是android 的资源xml 解析器的错。这让我想知道什么时候应该使用 +。
    猜你喜欢
    • 2015-03-06
    • 2019-06-15
    • 2011-06-22
    • 2015-12-11
    • 2012-02-12
    • 2012-06-27
    • 2010-11-29
    • 2015-12-23
    相关资源
    最近更新 更多