我是新手并试图理解以下XML代码:
查看developer.android.com上的文档,它说“starStyle”是R.attr和中的常量
public static final int starStyle
自:API级别1
默认星形样式。
必须是对“@ [+] [package:] type:name”形式的另一个资源的引用,或者是“?[package:] [type:] name”形式的主题属性。
它似乎说我可以声明2种语法。 1)“@ [+] [package:] type:name”2)“?[package:] [type:] name”。
如果有2个语法,那么“@ [+] [package:] type:name”的正确答案是什么?
我试过“”@android:attr / starStyle“但是我没有得到一个”星“复选框,即使应用程序编译好了。
@ -syntax用于在项目或Android框架中定义的资源。 ?-syntax用于当前主题中的资源。
对于应该在主题中定义的starStyle,您需要:
“机器人:ATTR / starStyle”
看到 这里 对主题资源进行一些阐述。
据我所知...
“?[package:] [type:] name”指的是Android风格。
作为示例,进度对话框样式属性将类似于:
风格= “机器人:ATTR / progressBarStyleLarge”
一个解释
- ? =?
- [package:] = android:
- [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
Android提供了一个快捷方式
使用当前应用主题中的样式。
为此,请使用 ?android:
而不是@作为您要使用的资源的前缀。
例:
<EditText
android:id="@+id/myEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@android:string/url"
android:textColor="?android:textColor"
/>
此技术使您可以创建在当前主题更改时更改的样式,而无需您
修改每个单独的样式资源。
我在这个问题上检查了很多,因为它让我很困惑。
之后的名字?你是引用在中定义的变量名称吗? <declare-styleable>
。
@之后的名称是您或系统定义的样式名称。
让我用C ++来比喻一下。
说,我们有 string str1 = "Hello world"
。
?就像字符串 str2 = str1
。这意味着你引用了它的值 str1
。
@ 就好像 string str2 = "Hello world"
。这意味着您直接使用该值。
@用于访问已定义的资源
"@android:drawables/test.png"
?用于访问定义的主题样式
"?android/attr/style"
希望这可以帮助