何时使用“?android”或“@android”?

Posted

技术标签:

【中文标题】何时使用“?android”或“@android”?【英文标题】:When to use "?android" or "@android"? 【发布时间】:2011-12-08 13:50:00 【问题描述】:

我是新手,正在尝试理解以下 XML 代码:

查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 和中的常量


public static final int starStyle 自:API 级别 1

默认星形样式。

必须是对另一个资源的引用,格式为“@[+][package:]type:name”或格式为“?[package:][type:]name”的主题属性。 H2>

似乎说我可以声明两种语法。 1) "@[+][package:]type:name" 2) "?[package:][type:]name".

如果有两种语法,“@[+][package:]type:name”的正确语法是什么?

我尝试了“@android:attr/starStyle”,但即使应用程序编译正常,我也没有得到“星”复选框。

【问题讨论】:

【参考方案1】:

@-syntax 用于在您的项目或 Android 框架中定义的资源。 ?-语法用于当前主题中的资源。

对于应该在主题中定义的starStyle,你想要:

"?android:attr/starStyle"

有关主题资源的详细说明,请参阅here。

【讨论】:

【参考方案2】:

Android 提供了一个快捷方式,使您能够

使用当前应用主题的样式。

为此,请使用?android: 而不是@ 作为您要使用的资源的前缀。

示例:

<EditText
android:id="@+id/myEditText"
android:layout_
android:layout_
android:text="@android:string/url"
android:textColor="?android:textColor"
/>

此技术使您可以创建在当前主题更改时更改的样式,而无需您 修改每个单独的样式资源。

【讨论】:

【参考方案3】:

我不知道...

"?[package:][type:]name" 指的是 Android 样式。 例如,进度对话框样式属性如下所示:

style="?android:attr/progressBarStyleLarge"

解释

? = ? [包:] = 安卓: [type:] = attr(属性) name = progressBarStyleLarge(或者在您的情况下:starStyle)

不过,样式也可以使用@...

"@[+][package:]type:name" 是某种资源。

因此,对于样式,您可以在“values”目录中名为“styles.xml”的文件中声明所有样式。

<style name="mono_text_headers">
    <item name="android:textSize">16sp</item>
    <item name="android:typeface">monospace</item>
    <item name="android:layout_marginBottom">5dp</item>
</style>

然后像字符串、drawable 等一样引用它们。 style="@style/mono_text_headers"

http://developer.android.com/guide/topics/ui/themes.html

【讨论】:

【参考方案4】:

简而言之,我不确定。

? 表示资源定义是框架

的一部分

@ 表示资源定义是 Your 项目/支持库

【讨论】:

【参考方案5】:

我在这个问题上查了很多,因为它曾经让我很困惑。

后面的名字?您是否正在引用在&lt;declare-styleable&gt; 中定义的变量名称。

@后面的名字是你或者系统定义的样式名。

让我用 C++ 做一个类比。

说,我们有string str1 = "Hello world"

?就像字符串str2 = str1。这意味着您引用了str1 的值。

@ 就像string str2 = "Hello world"。这意味着您正在直接使用该值。

【讨论】:

【参考方案6】:

@ 用于访问已定义的资源

"@android:drawables/test.png"

?用于访问已定义的主题样式

"?android/attr/style"

希望对你有帮助

【讨论】:

以上是关于何时使用“?android”或“@android”?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测用户何时在android中连接到wifi或移动互联网

java Android的网络连接接收器。无论何时连接或断开网络,都会通知您

如何判断文本何时被选中[Android [EditText]]

在 Android M 中确定应用何时退出空闲模式

何时在 Android 中使用 RxJava,何时使用 Android 架构组件中的 LiveData?

识别默认的 Android Checkbox 动画何时结束