"@android:"和"?android:"有什么区别?

7

什么是它们之间的区别?

android:color="@android:color/black"

并且

style="?android:attr/borderlessButtonStyle" 

“@”和“?”有什么区别?

这是一个无法通过搜索引擎解答的问题,或者需要使用ogooglebar


访问资源:要引用样式属性,名称语法与普通资源格式几乎相同,但是不使用艾特符号(@),而是使用问号(?),并且资源类型部分是可选的。 - devnull
这不是一个无法在谷歌上搜索到的内容.... :) - Pankaj Kumar
1
这个问题的URL别名很有趣。 - Andrew Barber
@PankajKumar 直到我提问并且谷歌将其排在顶部之前。请注意,重复的问题未被发现。 - Chloe
3个回答

9

@android:color/black

这表示你正在引用 Android 命名空间中定义的一个颜色。此命名空间是框架的命名空间。

在此文件中搜索黑色:框架中的黑色颜色

style="?android:attr/borderlessButtonStyle"

"?android:attr/borderlessButtonStyle" 简单地意味着“使用 android 命名空间中名为 borderlessButtonStyle 的属性所定义的值”。此属性及其值是 Android 框架的一部分,即“android”命名空间。

框架中的 borderlessButtonStyle


编辑:来自于引用样式属性

该链接告诉我们:

例如,以下是如何引用属性以将文本颜色设置为匹配系统主题“primary”文本颜色的方式:

<EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />

2
哇,那确实是字面上的正确,但并没有真正回答问题。 - Chloe
1
请检查我的编辑答案并告诉我系统主题是什么? - Dhaval Parmar

5

(来自这个答案及其评论)

在ID前加上问号表示您想访问一个在样式主题中定义的样式属性,而不是硬编码该属性,如参考样式属性中所解释的那样。

更具体地说,?意味着额外的间接级别。可以把它看作是取消引用主题属性以获取指向资源本身而不是属性本身的资源。您可以通过使用 ?android:attr/foo 来了解更多相关信息。



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接