Android风格,api级别的区别

时间:2015-09-18 10:13:03

标签: android android-xml android-styles

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

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

  2. 是否有对不同父样式的引用,例如parent="@style/Widget.AppCompat.Light.ActionBar及其含义?如何查找特定项目可用的不同父样式列表以及我可以覆盖的内容#34;在他们中?现在,它主要是猜测我......

  3. 作为参考,我发布了我当前的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>
    

1 个答案:

答案 0 :(得分:2)

我会尽力解释并专注于:

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

这些属性通常在API级别21中可用。通常,您使用带有“android”前缀的属性。

如果您在values文件夹的styles.xml中定义所有样式,并且如果您使用的是app compat,那么您需要两者。

没有前缀,属性适用于pre L设备。即App Compat。要使它适用于L设备和更高版本,您需要使用“android”前缀再次指定属性。

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