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: 作为前缀。

我希望现在清楚了