ColorPrimary在android 5.0以下无法正常工作

时间:2019-02-15 10:26:42

标签: java android kotlin

在我的应用中,用户可以在蓝色和绿色之间切换主题。在android 5.0以上版本中一切正常,但在android 5.0以下版本中,我的应用程序崩溃了。

下面是我的样式代码

  <style name="AppTheme.Blue" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/blue</item>
    <item name="colorPrimaryDark">@color/bllueDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.Green" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/bluish_green</item>
    <item name="colorPrimaryDark">@color/bluish_green</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

我的可绘制文件代码为

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="?colorPrimary"></solid>
        <corners android:radius="3dp"></corners>
    </shape>
</item>

我的布局

<androidx.constraintlayout.widget.ConstraintLayout
                        android:layout_width="match_parent"
                        android:layout_height="90dp"
                        android:background="@drawable/my_drawable">
//other code
</androidx.constraintlayout.widget.ConstraintLayout>

3 个答案:

答案 0 :(得分:2)

尝试使用?colorPrimary代替?attr/colorPrimary

答案 1 :(得分:2)

较低的Android API级别的XML可绘制对象不支持?attr/引用。我以为它是21级的,但是我找不到关于它的任何文档。

因此,您必须直接使用颜色资源。如果您需要为动态主题使用不同的颜色,则可以使用主题提供的正确绘制颜色的绘画来实现相似的目的。

或者,您可以在UI甚至支持的上下文中忽略这些较旧的Android版本。

答案 2 :(得分:0)

在您的colors.xml中声明colorPrimary,然后尝试 @color/colorPrimary代替?colorPrimary