【问题标题】:Android style - difference between @style, android:, @android:style, etcAndroid 风格 - @style、android:、@android:style 等之间的区别
【发布时间】:2016-03-29 20:49:35
【问题描述】:

在 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>

【问题讨论】:

    标签: android android-styles


    【解决方案1】:

    不带任何前缀引用同一个文件中命名的样式。

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

    @android:style 引用定义的 Android API 样式。

    更多关于Style ResourceStyle and Themes的信息。

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

    【讨论】:

    • 这不适用于 AppCompat。
    【解决方案2】:

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

    @type/name 标识了一个 type 类型的资源(字符串、颜色、布局、样式等),应用中定义的名称为 name

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

    @android:type/name 表示命名资源是即将推出的 Android 平台的一部分(它没有在应用中定义——它是由设备提供的)。

    对于样式父级,@style 是可选的。您可以直接按名称引用样式。这是多余的,因为无论如何您都不能从其他样式中派生出样式。

    【讨论】:

    • 谢谢。您能否详细说明 colorControlNormal 与 android:colorControlNormal 部分。我应该在我的 style.xml 中使用哪个?
    • 这不是关于您应该使用哪一种,而是关于为您的情况确定正确的一种。如果它是您自己定义的资源,则只需使用该名称即可。如果是 Android 平台定义的,则需要 android 前缀。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多