XML @style 在父级
XML @style in parent
在 android 示例中,样式父项定义如下
<style name="GreenText" parent="@android:style/TextAppearance">
但在 android 来源中我发现
<style name="Widget.AppCompat.ActionBar.TabText" parent="Base.Widget.AppCompat.ActionBar.TabText">
当我使用@style 和@android:style 作为前缀时有什么区别?
因为源代码中的开发人员正在继承他们自己定义的样式。
如果你定义
<style name="CodeFont" parent="@android:style/TextAppearance">
<item name="android:textColor">#00FF00</item>
</style>
你不需要从样式中写父级,但可以只写
<style name="CodeFont.Red">
<item name="android:textColor">#FF0000</item>
</style>
像这样。
这里的解释http://developer.android.com/guide/topics/ui/themes.html#Inheritance
注意<style>
标签中没有parent属性,但是因为name属性以CodeFont样式名开头(这是你自己创建的样式),所以这个样式继承了所有的样式属性那种风格。然后,此样式会覆盖 android:textColor 属性 以使文本变为红色。您可以将此新样式引用为 @style/CodeFont.Red.
您可以通过用句点链接名称来继续像这样继承任意多次。例如,您可以将 CodeFont.Red 扩展得更大,使用:
<style name="CodeFont.Red.Big">
<item name="android:textSize">30sp</item>
</style>
一般来说,如果你把“@android”放在某些东西的前面,这意味着你正在寻找一个在android包中定义的资源,而不是在你的项目中。
例如,如果您要获取颜色:
android:background="@android:color/holo_red_dark"
这将获得 Android holo_red_dark 颜色。您的项目中没有定义此颜色。
android:background="@color/my_red_color"
这将在您的项目中定义您的 "my_red_color"。
样式也是如此。
编辑:
问题是
之间没有区别
parent="@style/MyStyle"
和
parent="MyStyle"
用于在您的项目中编译的样式。你不妨写
<style name="Widget.AppCompat.ActionBar.TabText" parent="@style/Base.Widget.AppCompat.ActionBar.TabText">
它会起作用。
因此,考虑到 Base.Widget.AppCompat.ActionBar.TabText
是在您的项目中从支持库编译的,您可以添加它,添加前缀或不添加 @style
。但是,@android:style/TextAppearance
来自 Android 包,这就是为什么您必须指定 @android:
作为前缀。
我希望现在清楚了
在 android 示例中,样式父项定义如下
<style name="GreenText" parent="@android:style/TextAppearance">
但在 android 来源中我发现
<style name="Widget.AppCompat.ActionBar.TabText" parent="Base.Widget.AppCompat.ActionBar.TabText">
当我使用@style 和@android:style 作为前缀时有什么区别?
因为源代码中的开发人员正在继承他们自己定义的样式。
如果你定义
<style name="CodeFont" parent="@android:style/TextAppearance">
<item name="android:textColor">#00FF00</item>
</style>
你不需要从样式中写父级,但可以只写
<style name="CodeFont.Red">
<item name="android:textColor">#FF0000</item>
</style>
像这样。
这里的解释http://developer.android.com/guide/topics/ui/themes.html#Inheritance
注意<style>
标签中没有parent属性,但是因为name属性以CodeFont样式名开头(这是你自己创建的样式),所以这个样式继承了所有的样式属性那种风格。然后,此样式会覆盖 android:textColor 属性 以使文本变为红色。您可以将此新样式引用为 @style/CodeFont.Red.
您可以通过用句点链接名称来继续像这样继承任意多次。例如,您可以将 CodeFont.Red 扩展得更大,使用:
<style name="CodeFont.Red.Big">
<item name="android:textSize">30sp</item>
</style>
一般来说,如果你把“@android”放在某些东西的前面,这意味着你正在寻找一个在android包中定义的资源,而不是在你的项目中。
例如,如果您要获取颜色:
android:background="@android:color/holo_red_dark"
这将获得 Android holo_red_dark 颜色。您的项目中没有定义此颜色。
android:background="@color/my_red_color"
这将在您的项目中定义您的 "my_red_color"。
样式也是如此。
编辑: 问题是
之间没有区别parent="@style/MyStyle"
和
parent="MyStyle"
用于在您的项目中编译的样式。你不妨写
<style name="Widget.AppCompat.ActionBar.TabText" parent="@style/Base.Widget.AppCompat.ActionBar.TabText">
它会起作用。
因此,考虑到 Base.Widget.AppCompat.ActionBar.TabText
是在您的项目中从支持库编译的,您可以添加它,添加前缀或不添加 @style
。但是,@android:style/TextAppearance
来自 Android 包,这就是为什么您必须指定 @android:
作为前缀。
我希望现在清楚了