【问题标题】:Android vector compatibilityAndroid 矢量兼容性
【发布时间】:2015-10-30 12:01:07
【问题描述】:

我想开始在我做的应用程序中使用矢量图标,但不知道如何处理兼容性

我对任何第三方兼容库都不感兴趣,很高兴等待 google 版本(此处提到 VectorDrawable - is it available somehow for pre-Lollipop versions of Android?)。

所以基本上现在我很高兴继续拥有每个分辨率的图像以及 > Lollipop 的附加图像。如果设备高于 21,它将使用矢量,否则将回退到标准 png。

我可以将矢量放在 drawable-v21 文件夹中,但 drawable-[dpi] 文件夹优先于版本,这意味着不使用矢量。

我希望使用矢量,以便当兼容可用时,我可以简单地删除所有 png,并且知道矢量会没问题,因为我已经能够在运行 Lollipop 的设备上测试它们。

【问题讨论】:

标签: android vector drawable


【解决方案1】:

现在 google 发布了Android Support Library 23.2 支持 Vector Drawables 和 Animated Vector Drawables !

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

注意:

- 一直到 API 7 (Android 2.1 Eclair) 的矢量图像。

- 动画矢量受到更多限制,只能追溯到最远的地方 作为 API 11

【讨论】:

    【解决方案2】:

    为了向后兼容 Vector Drawables,我在 API Level pre-20 设备上使用了以下配置。

    build.gradle

    vectorDrawables.useSupportLibrary = true
    
    dependencies{classpath 'com.android.tools.build:gradle:2.1.2'}
    

    活动

    onCreate > AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

    XML 图像视图

    app:srcCompat="@drawable/vector"
    

    程序化 ImageView

    imageView.setBackgroundResource(R.vector);
    

    vector.xml

    <vector xmlns:android="http://schemas.android.com/apk/res/android"
            android:width="30dp"
            android:height="20dp"
            android:viewportHeight="20.0"
            android:viewportWidth="30.0">
        <path
            android:fillColor="#4C5F70"
            android:pathData="DATA_HERE"
            android:strokeColor="#00000000"
            android:strokeWidth="1"/>
    </vector>
    

    【讨论】:

      【解决方案3】:

      从 Android 5.0(API 级别 21)开始,您可以在应用中使用矢量绘图。您可以使用名为 Vector Asset Studio 的新 Android Studio 工具。它会自动处理旧版本的 PNG 制作。完整的解释见下面的链接:

      Vector Asset Studio

      【讨论】:

        【解决方案4】:

        使用 Android 支持库 23.2, 现在从 API 级别 7 开始支持 VectorDrawables,从 API 级别 11 开始支持 AnimatedVectorDrawables。

        所以现在你可以使用

        app:srcCompat

        而不是

        app:src

        用于使用具有向后兼容性的VectorDrawables。

        【讨论】:

        • 不错的更新。你有链接到这方面的细节吗?谷歌有没有提供任何关于它的细节。
        【解决方案5】:

        如果你使用 SRC,那么使用这个:

        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        

        您不需要在每个活动中添加该行,如果您在 Application 类中添加一次,它也可以工作。像这样:

        public class App extends Application {
        
        static {
        
            AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        }
        

        记住:您仍然需要在应用级 gradle 中启用支持库:

        android {
        
          defaultConfig {
        
            vectorDrawables.useSupportLibrary = true
        
          }
        
        }
        

        内部xml使用:

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

        当你想使用矢量drawable作为drawableTop,bottom,right,left然后使用LayerDrawable否则它会在低于5.0的设备上崩溃

        <level-list xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:drawable="@drawable/search"/>
        </level-list>
        

        【讨论】:

          【解决方案6】:

          编辑:这是在 Android Studio 1.4 发布之前的临时修复。不再需要这个。请参阅 Ka Developer 的答案

          找到了一个虽然不是很出色但确实有效的解决方案。

          您需要为每个 dpi 文件夹创建一个棒棒糖 drawables 文件夹,并为每个文件夹添加相同的矢量。

          例如创建文件夹

          可绘制-hdpi-v21
          可绘制-xhdpi-v21
          可绘制-xxhdpi-v21
          drawable-xxxhdpi-v21

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-08
            • 2011-08-11
            • 1970-01-01
            • 2012-06-24
            • 2013-10-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多