在Android布局xml文件中,“?android:”和“@android:”有什么区别?

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

我发现的唯一区别是以下例子。

这里TextView的右边缘与ImageButton的左边缘alignment

<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的右边缘alignment。 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。 都编译没有错误。

非常感谢。

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

请参阅“引用样式属性”: 访问资源