【问题标题】:How to use Android vector drawables as background for an activity?如何使用 Android 矢量绘图作为活动的背景?
【发布时间】:2019-05-13 12:07:33
【问题描述】:

我无法在 Android 活动中将矢量可绘制 xml 设置为背景。

我尝试通过设置android:background="@drawable/test_background"将其设置为背景

  • 到我的活动的 Coordinator 布局根目录。

  • 到 Coordinator 布局子约束布局

  • 通过app:srcCompat"= @drawable/test_background"ConstraintLayoutImageView 子代

上述方法均无效。我在设计预览中只能看到黑屏,并且我的应用程序崩溃并出现致命异常:

android.view.InflateException:二进制 XML 文件第 5 行:错误 膨胀类 android.support.design.widget.CoordinatorLayout

这是我的布局大纲:

<?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/test_background"
        android:fitsSystemWindows="true"
        android:orientation="vertical"
        android:scrollbarStyle="outsideOverlay">

       <android.support.constraint.ConstraintLayout>
           <android.support.v7.widget.AppCompatImageView>
           </android.support.v7.widget.AppCompatImageView>

       </android.support.constraint.ConstraintLayout>

</android.support.design.widget.CoordinatorLayout>

test_background drawable 是从 png 图像创建的 xml 矢量资源,在 Inkscape 中转换为 svg,并通过 Inkscape 插件导出为 xml 资源。 png 图像包含一种模式,我从未真正将其上的任何东西转换为路径。所以它看起来像这样:

<vector xmlns:ns0="http://schemas.android.com/apk/res/android"
    ns0:name="svg869" 
    ns0:width="1382.2272dp" 
    ns0:height="2073.3408dp" 
    ns0:viewportWidth="666.666666667" 
    ns0:viewportHeight="1000.0"/>

但是,我确实确认插件正在成功导出 xml,因为我可以成功地将 xml 背景设置为图标(例如作为徽标/图标)。

我的问题是我无法将矢量设置为背景。

是否需要在可绘制对象中设置任何属性才能将其用作活动的背景?还是我做错了什么?

非常感谢您的帮助!

【问题讨论】:

    标签: android android-vectordrawable


    【解决方案1】:

    您需要将 SVG 转换为 Android 矢量资源。您可以使用 Android Studio 轻松完成此操作。 右键单击您的项目 > 新建 > 矢量资源。然后选择“本地文件”并输入文件位置/路径

    【讨论】:

    • 谢谢,刚刚试了。出现错误:无法生成预览。它不允许我继续下一步。
    • 此方法适用于 SVG 文件小于 2MB。
    【解决方案2】:

    here 所述,您必须创建一个新的可绘制图层来保存矢量可绘制对象。此实现适用于 Pre-Lollipop 设备。 Lollipop 及以上的设备不需要这个。我已经对其进行了测试,并且它可以工作,即无论您拥有的 rootview 类型如何。

    【讨论】:

    • 这不起作用。我用我自己的向量尝试了这个例子,它在 Android 4.1 上崩溃了。当我删除背景字段时,一切正常。
    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多