Android 种风格,api 级之间的差异

Android styles, difference between api levels

我正在尝试学习如何使用 styles.xml 文件来设置我的应用程序的样式,我需要澄清一些事情才能理解它。

  1. 在一个项目中,设置 android:actionbarstyle 和只设置 actionbarstyle 有什么区别?我知道在这种特殊情况下,我必须同时定义两者,但为什么呢?那么所有其他情况呢,例如 android:colorPrimarycolorPrimary?在那种情况下,我收到一条错误消息,指出 android:colorPrimary 只能与 min API 级别 21 一起使用。那么有人对 android: 前缀的作用以及它如何影响我有很好的解释吗?应用程序?

  2. 是否有对不同父样式的引用,例如 parent="@style/Widget.AppCompat.Light.ActionBar 以及它们的含义?如何找到特定项目可用的不同父级样式的列表以及我可以在其中 "override" 做什么?现在,这主要是我的猜测....

作为参考,我发布了我当前的 styles.xml 文件。

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="AppTheme" parent="MyTheme"/>

    <style name="MyTheme" parent="Theme.AppCompat.Light">
        <item name="actionBarTheme">@style/MyTheme.ActionBarTheme</item>
        <item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
        <item name="actionBarStyle">@style/MyTheme.ActionBarStyle</item>

        <item name="colorPrimary">@color/my_green</item>
        <item name="colorPrimaryDark">@color/my_forest</item>
        <item name="colorAccent">@color/my_soil</item>

        <item name="drawerArrowStyle">@style/MyTheme.DrawerArrowStyle</item>

        <item name="android:actionOverflowButtonStyle">@style/MyTheme.OverFlow</item>

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

        <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
        <item name="android:homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>

        <item name="colorControlNormal">@color/my_green</item>
        <item name="colorControlActivated">@color/my_forest</item>
        <item name="colorControlHighlight">@color/my_deep_green</item>
    </style>

    <style name="MyTheme.ActionBarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
        <!-- This sets the BACK arrow to white. Otherwise it's black. Must be placed in the theme-->
        <item name="colorControlNormal">@color/white</item>
    </style>

    <style name="MyTheme.ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar">
        <item name="android:background">@color/my_green</item>
        <item name="background">@color/my_green</item>
        <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="colorControlNormal">@color/white</item>
    </style>

    <style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
        <item name="android:textColor">@color/white</item>
    </style>

    <style name="MyTheme.DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="spinBars">true</item>
        <item name="color">@color/white</item>
    </style>

    <style name="MyTheme.OverFlow" parent="Widget.AppCompat.ActionButton.Overflow">
        <item name="android:tint">@color/white</item>
    </style>
</resources>

我会尽力解释,并会专注于:

<item name="colorPrimary">@color/my_green</item>
<item name="colorPrimaryDark">@color/my_forest</item>
<item name="colorAccent">@color/my_soil</item>

这些属性通常在 API 级别 21 时可用。通常您使用带有 "android" 前缀的属性。

如果您在值文件夹的 styles.xml 中定义了所有样式,并且您使用的是应用程序兼容性,那么您需要两者。

没有前缀,属性适用于 L 之前的设备。即应用程序兼容性。要使其适用于 L 及更高版本的设备,您需要使用 "android" 前缀再次指定该属性。

并且要获得其他 Android 样式,您可以进入它们,就像进入 类 和实现一样。对于 Mac,我按下命令按钮,然后用鼠标单击特定样式。