使用"?android:colorBackground"因为颜色会在Galaxy Note 3(4.4.2)上崩溃我的应用程序而不会破坏Nexus

时间:2015-10-07 11:17:09

标签: android

是否有最低安卓版本要求才能访问此颜色或其他内容?我需要将对象的背景颜色设置为'默认'背景颜色和'?android:colorBackground'在我的Nexus 5(Android 5.1.1)上运行良好,但它正在崩溃我的笔记。

我有一个名为editor_border.xml的drawable,如下所示:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
            <!-- content background -->
            <item>
                <shape>
                    <solid android:color="?android:colorBackground" />
                    <corners android:radius="2dp" />
                </shape>
            </item>  
    </layer-list>

我使用这个drawable作为布局的背景。在给布局充气时,我的应用程序崩溃了下面的错误&#34;

10-07 22:23:52.634: E/AndroidRuntime(6512): android.view.InflateException: Binary XML file line #11: Error inflating class <unknown>

进一步向下

10-07 22:23:52.634: E/AndroidRuntime(6512): Caused by: android.content.res.Resources$NotFoundException: File res/drawable-v4/editor_border.xml from drawable resource ID #0x7f020005

10-07 22:23:52.634: E/AndroidRuntime(6512): Caused by: java.lang.UnsupportedOperationException: Can't convert to color: type=0x2

删除颜色或将其更改为任何其他颜色都可以。

1 个答案:

答案 0 :(得分:1)

可绘制资源中的自定义属性似乎只能在API 21中使用。我无法找到备份来源,但Google I / O计划应用中的a commit会证明这一点。

解决方法是拥有2个不同的可绘制资源,一个用于API 21+,另一个用于21之前,您不应使用自定义属性。

<强>抽拉/ background.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- content background -->
    <item>
        <shape>
            <solid android:color="@color/your_color" />
            <corners android:radius="2dp" />
        </shape>
    </item>  
</layer-list>

<强>绘制-V21 / background.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- content background -->
    <item>
        <shape>
            <solid android:color="?android:colorBackground" />
            <corners android:radius="2dp" />
        </shape>
    </item>  
</layer-list>