Android支持库v4:22+在attr/in drawables中崩溃前Lollipop

Mic*_*hal 6 android android-support-library

我经历了一个奇怪的效果,处理具有支持lib属性的形状drawables.我有以下代码,在通货膨胀期间每次都会崩溃.

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
<size android:width="26dp" android:height="26dp"/>
<solid android:color="?attr/colorPrimary"/>
Run Code Online (Sandbox Code Playgroud)

注意我使用?attr/colorPrimary作为颜色.如果我使用

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
<size android:width="26dp" android:height="26dp"/>
<solid android:color="@color/primary"/>
Run Code Online (Sandbox Code Playgroud)

没有任何崩溃,它工作正常.问题仅出在运行Android版本低于5.0的设备上.我正在使用以下支持lib

compile 'com.android.support:support-v4:22.2.1'
Run Code Online (Sandbox Code Playgroud)

有人发现了这种情况发生的原因吗?这是支持库中的错误吗?

Min*_*tdh 2

<solid android:color="?attr/colorPrimary"/>指向Android代码中的私有颜色(不是公开的),也许它在某些API中不存在。
虽然<solid android:color="@color/primary"/>将指向项目中的颜色,但也许您primary仅在文件夹 value-v21 中拥有颜色名称,因此它仅在低于 5.0 的版本中崩溃
,我认为您应该尝试使用此: <solid android:color="@android:attr/colorPrimary"/>以确保该属性存在。
希望这可以帮助。

  • 无论如何,如果我在布局 XML 文件中使用 ?attr/colorPrimary,它就可以正常工作。问题仅出现在 &lt;shape&gt; 可绘制内部定义时。当我将支持库作为依赖项包含时,支持库中的属性将在整个项目中可见。我错了? (3认同)