何时使用“?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】:我在这个问题上查了很多,因为它曾经让我很困惑。
后面的名字?您是否正在引用在<declare-styleable>
中定义的变量名称。
@后面的名字是你或者系统定义的样式名。
让我用 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]]