android布局xml文件中“?android:”和“@android:”之间有什么区别?

时间:2011-01-23 01:58:28

标签: android layout reference

android布局xml文件中“?android:”和“@android:”之间有什么区别?它们似乎是重用android SDK资源的可互换方式。

以下示例说明了我发现的唯一区别。

此处TextView的右边缘与ImageButton的左边缘对齐

 <RelativeLayout
    android:id="@id/header"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#888888">
    <TextView
        android:id="@android:id/text1"
        android:layout_alignParentLeft="true"
        android:text="blah blah"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@android:id/button1" />
    <ImageButton
        android:id="@android:id/button1"
        android:layout_alignParentRight="true"
        style="@style/PlusButton" />
</RelativeLayout>

然而,在这里,TextView的右边缘与RelativeLayout的右边缘对齐。 TextView与ImageButton重叠。

<RelativeLayout
    android:id="@id/header"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#888888">
    <TextView
        android:id="@android:id/text1"
        android:layout_alignParentLeft="true"
        android:text="blah blah"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="?android:id/button1" />
    <ImageButton
        android:id="?android:id/button1"
        android:layout_alignParentRight="true"
        style="@style/PlusButton" />
</RelativeLayout>

两种布局之间的唯一区别是使用@android vs?android。两者都编译没有错误。

非常感谢。

1 个答案:

答案 0 :(得分:34)

使用问号前缀ID表示您要访问样式主题中定义的样式属性,而不是对属性进行硬编码。

请参阅此处的“引用样式属性”:accessing-resources