如何在低于21的Android API中使用VectorDrawables?

2022-08-31 13:03:22

我正在开发一个Android项目,我选择显示图标,因为它具有适应性和动态性,但是,我只能在运行Android的设备上运行此应用程序,这些设备具有API 21或更高版本。我的问题是我如何在较低的Android版本上使用,即API 14或某种程度。谢谢!<vector><vector>

<!-- drawable/ic_android_debug_bridge.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="48dp"
    android:width="48dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
    <path android:fillColor="@color/primaryColorDark"
        android:pathData="M15,9A1,1 0 0,1 14,8A1,1 0 0,1 15,7A1,1 0 0,1 16,8A1,1 `0 0,1 15,9M9,9A1,1 0 0,1 8,8A1,1 0 0,1 9,7A1,1 0 0,1 10,8A1,1 0 0,1 9,9M16.12,4.37L18.22,2.27L17.4,1.44L15.09,3.75C14.16,3.28 13.11,3 12,3C10.88,3 9.84,3.28 8.91,3.75L6.6,1.44L5.78,2.27L7.88,4.37C6.14,5.64 5,7.68 5,10V11H19V10C19,7.68 17.86,5.64 16.12,4.37M5,16C5,19.86 8.13,23 12,23A7,7 0 0,0 19,16V12H5V16Z" /></vector>

答案 1

借助支持库 23.2,对 Vector Drawables 的真正支持一直提供到 API v7。建议禁用以前版本的支持,该版本在构建时呈现 PNG,方法是添加

// Gradle Plugin 2.0+
 android {
   defaultConfig {
     vectorDrawables.useSupportLibrary = true
    }
 }

添加到该文件。build.gradle

实现相当简单。只需在 Drawables 上使用新的 srcCompat 属性(在 app 命名空间下!

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:srcCompat="@drawable/ic_add" />    // <= this is new

在 TextView 的属性等情况下也支持矢量可绘制对象。drawableLeft

资料来源:图书馆公告

但是,我仍然会推荐像Iconics库AndroidSVG或其他字体图标或SVG解决方案这样的东西,以获得完整的SVG-stand和矢量支持。


答案 2

VectorDrawable在棒棒糖之前通过支持库支持,但使用它们的方式取决于您拥有的支持库的版本。它可能并非在所有情况下都有效。

我制作此图表是为了帮助(适用于支持库 23.4.0 至 - 至少 - 25.1.0)。

VectorDrawable cheatsheet