“colorPrimary”和attr的attr有什么区别? “机器人:colorPrimary”?

时间:2016-03-11 06:03:59

标签: android android-layout

例如: 在values-v21 / styles.xml

<style...>
    <item name="**android:**colorPrimary">@color/primaryColor</item>
</style>`

它可以工作,而在values / styles.xml中,它必须是这样的:

<style...>
     <item name="colorPrimary">@colorPrimary</item>
</style>`

为什么这样?

3 个答案:

答案 0 :(得分:3)

简而言之:

支持lib使用没有android:前缀的样式项。 没有的是由API提供的。

您可能已经注意到,如果您使用的样式项目低于您的最小API,那么android工作室会给您警告,如果他们没有获得Android前缀,则可能会在较旧的API版本中忽略它们。

<强>解释

例如,在API 11中引入了Actionbar。

正常使用:

<item name="android:actionBarStyle" tools:targetApi="11">@style/CustomActionBarTheme.AppCompat.ActionBar</item>

支持lib使用:

<item name="actionModeStyle">@style/CustomActionBarTheme.AppCompat.ActionMode</item>

如果您查看Appcompat主题,您会注意到主题根据您的Android版本使用不同的值文件。

因此默认值文件位于values文件夹中。但是如果我们得到一个Lollipop设备,则使用values-v21文件夹。让我们看看文件(这是主题的开头):

值:

<style name="Platform.AppCompat" parent="android:Theme">
        <item name="android:windowNoTitle">true</item>

        <!-- Window colors -->
        <item name="android:colorForeground">@color/bright_foreground_material_dark</item>
        <item name="android:colorForegroundInverse">@color/bright_foreground_material_light</item>
        <item name="android:colorBackground">@color/background_material_dark</item>
        <item name="android:colorBackgroundCacheHint">@color/abc_background_cache_hint_selector_material_dark</item>
        <item name="android:disabledAlpha">@dimen/abc_disabled_alpha_material_dark</item>
....

值-V21:

<style name="Theme.Material">
        <item name="colorForeground">@color/bright_foreground_material_dark</item>
        <item name="colorForegroundInverse">@color/bright_foreground_material_light</item>
        <item name="colorBackground">@color/background_material_dark</item>
        <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_material_dark</item>
        <item name="disabledAlpha">@dimen/disabled_alpha_material_dark</item>
        <item name="backgroundDimAmount">0.6</item>

总结一下:支持lib将使用值/ drawables等,如果它们在使用的API中可用。否则它将使用值/ etc。支持lib。

答案 1 :(得分:0)

新版Android提供新值

您可以查看Maintaining Compatibility

答案 2 :(得分:0)

设置colorPrimary时,您需要设置由支持库制作的自定义属性,以支持API中的材质主题&lt; 21.但是android:colorPrimary是一个属性,在Android API 21及更高版本中可用于设置主题。