Android style - @style、android:、@android:style 等之间的区别

Android style - difference between @style, android:, @android:style, etc

在 android 开发人员示例、博客等中,我看到了样式属性值的多个前缀。有人可以描述一下什么时候使用什么吗?比如这3种情况有什么区别?

parent="@android:style/TextAppearance"
parent="TextAppearance.AppCompat"
parent="@style/TextAppearance.AppCompat"

这两种情况有什么区别?

<item name="colorControlNormal">@color/white</item>
<item name="android:colorControlNormal">@color/white</item>

没有任何前缀引用同一文件中命名的样式。

@Style 引用您的 style.xml 项目文件。

@android:style引用定义AndroidAPIstyle.

更多关于 Style Resource and Style and Themes

关于colorControlNormal vs android:colorControlNormal是同一个解释。如果您使用 controlColorNormal,您将在您的应用程序中定义应用到处于正常状态的框架控件的颜色。如果您使用 android:colorControlNormal 您将覆盖系统应用到框架控件的颜色默认值。

您可以将 @ 视为即将出现命名资源的信号。

@type/name 标识类型为 type 的资源(字符串、颜色、布局、样式等),名称为 name,在应用程序中定义即将出现。

@+id/name 标识一个名为 name 的 id 资源,如果它不存在则将被创建(而 @id 只是指一个已经存在的 id)。

@android:type/name 表示指定资源是 Android 平台的一部分即将推出(它是应用程序中定义的 not -- 它由设备)。

对于样式 parents,@style 是可选的。您可以直接通过名称引用样式。这是多余的,因为无论如何你都不能从除另一种样式以外的任何东西中派生出一种样式。