除了id属性之外,为什么允许声明@ + id

时间:2015-06-09 13:54:25

标签: android xml layout

所以最后我不得不重建我的Android应用程序的XML布局文件。我看到像

这样的结构
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:id="@+id/rev_main"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/rev_arrow">
        <!-- some stuff in here -->
    </LinearLayout>
    <ImageView
        android:id="@+id/rev_arrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/arrow"
        />
</RelativeLayout>

当我看到有人在非android:id属性中使用@ + id时,真的很烦人。当任何开发人员想要搜索此ID时,他会首先找到LinearLayout而不是ImageView。 我的问题是为什么谷歌允许它?是否有任何特殊原因,我只是不知道它?

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:2)

是的,有一个原因: 有时,您必须相对于稍后在XML文件中声明的视图B的位置设置视图A(在您的示例中就是这种情况.LineLayout是“View A”,ImageView是“View B” )。

想象一下,您遇到问题的代码

android:layout_below="@+id/rev_arrow"

将会是这样的:

android:layout_above="@+id/rev_arrow"

如果你不能在里面声明一个id,那么android:layout_above将毫无用处。

因为在一些评论中提到了: 您必须始终在该位置使用“加号” - 符号,其中id首先在布局文件中声明(从上到下)。它与属性不同,如“id”或“layout_below”。

答案 1 :(得分:0)

这是对ID的有效使用,因为它告诉布局管理员id/rev_main视图标识的视图将放置在id/rev_arrow标识的视图下方。

因此,在android:id以外的地方,id用作对各个ID所标识的视图的引用。