首页 > 解决方案 > 在 Jetpack Compose 中使用 xml drawable 时出现 XmlPullParserException

问题描述

我想尝试通过 compose 重新使用我的旧形状可绘制文件。这是我的 shape.xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <gradient android:startColor="#584BDD"
        android:endColor="#B755FF"
        android:angle="90"/>

</shape>

这是我的可组合代码:

@Composable
fun SplashScreen() {
    Box(
        modifier = Modifier
            .fillMaxSize()
    ) {
        Image(
            imageVector = ImageVector.vectorResource(id = R.drawable.sp_rectangle_gradient_blue_purple),
            contentDescription = "Background"
        )
    }
}

我想使用形状 xml 作为框的背景图像。但我总是得到 XmlPullParser 异常。我正在使用最新的1.0.0-beta07. 这是完整的日志:

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:502)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
     Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #3<VectorGraphic> tag requires viewportWidth > 0
        at androidx.compose.ui.graphics.vector.compat.XmlVectorParser_androidKt.createVectorImageBuilder(XmlVectorParser.android.kt:170)
        at androidx.compose.ui.res.VectorResources_androidKt.loadVectorResourceInner(VectorResources.android.kt:73)
        at androidx.compose.ui.res.VectorResources_androidKt.vectorResource(VectorResources.android.kt:59)
        at androidx.compose.ui.res.VectorResources_androidKt.vectorResource(VectorResources.android.kt:49)
        at com.wiryadev.adsadvancecompose.MainActivityKt.SplashScreen(MainActivity.kt:45)
        at com.wiryadev.adsadvancecompose.ComposableSingletons$MainActivityKt$lambda-1$1.invoke(MainActivity.kt:31)
        at com.wiryadev.adsadvancecompose.ComposableSingletons$MainActivityKt$lambda-1$1.invoke(MainActivity.kt:30)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
        at androidx.compose.material.SurfaceKt$Surface$1.invoke(Surface.kt:119)
        at androidx.compose.material.SurfaceKt$Surface$1.invoke(Surface.kt:108)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
        at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:193)
        at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:105)
        at com.wiryadev.adsadvancecompose.ComposableSingletons$MainActivityKt$lambda-2$1.invoke(MainActivity.kt:30)
        at com.wiryadev.adsadvancecompose.ComposableSingletons$MainActivityKt$lambda-2$1.invoke(MainActivity.kt:28)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
        at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:193)
        at androidx.compose.material.TextKt.ProvideTextStyle(Text.kt:246)
        at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:81)
        at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:80)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
        at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:193)
        at androidx.compose.material.MaterialThemeKt.MaterialTheme(MaterialTheme.kt:72)
        at com.wiryadev.adsadvancecompose.ui.theme.ThemeKt.ADSAdvanceComposeTheme(Theme.kt:41)
        at com.wiryadev.adsadvancecompose.ComposableSingletons$MainActivityKt$lambda-3$1.invoke(MainActivity.kt:28)
        at com.wiryadev.adsadvancecompose.ComposableSingletons$MainActivityKt$lambda-3$1.invoke(MainActivity.kt:27)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
        at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
        at androidx.compose.ui.platform.ComposeView.Content(ComposeView.android.kt:346)
        at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:202)
        at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:201)

我知道我们可以在撰写中使用画笔制作渐变。但我只想知道是否可以使用旧的可绘制文件。提前致谢。

标签: androidandroid-jetpack-compose

解决方案


推荐阅读