【问题标题】:What's the difference between "?android:" and "@android:" in an android layout xml file?android布局xml文件中的“?android:”和“@android:”有什么区别?
【发布时间】:2011-01-23 01:58:28
【问题描述】:

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 与 ?android 的使用。两者都编译没有错误。

非常感谢。

【问题讨论】:

标签: android layout reference


【解决方案1】:

在 ID 前加上问号表示您要访问在样式主题中定义的样式属性,而不是硬编码该属性。

在此处查看“引用样式属性”:accessing-resources

【讨论】:

  • 更具体地说,?意味着额外的间接级别。将其视为取消引用主题属性以获取它指向的资源,而不是引用属性本身。您可以通过 ?android:attr/foo 看到这一点。
  • 我希望这个答案有更多的解释
  • @Imray,这是一个示例:我从 sdk\platforms\android-L\data\res\values 中的themes.xml 文件中找到了这些样式。 &lt;style name="Theme"&gt; &lt;item name="colorForeground"&gt;@android:color/bright_foreground_dark&lt;/item&gt; &lt;style&gt; &lt;style name="Theme.Light"&gt; &lt;item name="colorForeground"&gt;@color/bright_foreground_light&lt;/item&gt; &lt;/style&gt; &lt;style name="Theme.Holo"&gt; &lt;item name="colorForeground"&gt;@android:color/bright_foreground_holo_dark&lt;/item&gt; &lt;/style&gt; 项目在同一目录下 attrs.xml 文件的 中引用。
  • 它们使用相同的名称,这意味着它们代表相同的资源。因此,当您在这 3 个主题之间切换时,您正在使用的 attr 将获取所选主题中指定的项目并将其用作可绘制对象。对不起,如果我的回答是关于可绘制的,但这是我能提供的最好的例子。
猜你喜欢
  • 2017-03-30
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 2022-08-04
相关资源
最近更新 更多