在我的应用中,用户可以在蓝色和绿色之间切换主题。在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>
答案 0 :(得分:2)
尝试使用?colorPrimary
代替?attr/colorPrimary
答案 1 :(得分:2)
较低的Android API级别的XML可绘制对象不支持?attr/
引用。我以为它是21级的,但是我找不到关于它的任何文档。
因此,您必须直接使用颜色资源。如果您需要为动态主题使用不同的颜色,则可以使用主题提供的正确绘制颜色的绘画来实现相似的目的。
或者,您可以在UI甚至支持的上下文中忽略这些较旧的Android版本。
答案 2 :(得分:0)
在您的colors.xml中声明colorPrimary,然后尝试
@color/colorPrimary
代替?colorPrimary