当前位置: 首页 > 知识库问答 >
问题:

如何正确使用向后兼容的Vector Drawable和最新的Android支持库?

孟高峰
2023-03-14

矢量绘图不久前已添加到支持库中,从那时起API发生了很多变化:Gradle标志、初始化器块、选择器、自定义XML属性等。问题是-现在如何正确使用它(支持lib v25)在这些情况下:

  • 图像视图
  • 文本视图可绘制
  • 菜单图标
  • 通知图标

XML和编程方式。

共有2个答案

笪烨
2023-03-14

你需要添加矢量绘图功能。useSupportLibrary=适用于您的构建。gradle文件:

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

你会注意到这个新属性只存在于Gradle插件的2.0版本中。如果您使用Gradle 1.5,您将使用:

// Gradle Plugin 1.5  
 android {  
   defaultConfig {  
     generatedDensities = []  
  }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 }  

您需要将srcCompat添加到ImageView:

<ImageView  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  app:srcCompat="@drawable/ic_add" /> 
盖嘉庆
2023-03-14

将最新的支持库添加到应用程序的版本中。gradle依赖项:

compile 'com.android.support:appcompat-v7:26.0.2'

并在同一文件中添加以下行:

android {
    ...
    defaultConfig {
        ...
        vectorDrawables.useSupportLibrary = true
    }
    ...
}

通过vector Asset Studio导入矢量图像。

就这样,你准备好出发了!

XML

使用app:srccomat属性而不是android:src

<ImageView
    ...
    app:srcCompat="@drawable/your_vector" 
    ... />

以编程方式

直接从资源id:

imageView.setImageResource(R.drawable.your_drawable);

设置为可绘制对象(例如用于着色):

Drawable vectorDrawable 
                = AppCompatResources.getDrawable(context, R.drawable.your_vector);
imageView.setImageDrawable(vectorDrawable);

如果要设置色调:

DrawableCompat.setTint
             (vectorDrawable, ContextCompat.getColor(context, R.color.your_color));

XML

没有简单的解决方案:XML属性android: draableTop(Bottom etc)无法处理前Lollipop上的矢量图像。一种解决方案是将初始化器块添加到活动并将向量包装到另一个XML绘图器中。第二-定义自定义TextView。

以编程方式

直接设置资源不起作用,必须使用Drawableobject。以与ImageView相同的方式获取它,并使用适当的方法进行设置:

textView.setCompoundDrawablesWithIntrinsicBounds(vectorDrawable, null, null, null);

没有什么特别的:

<item
    ...
    android:icon="@drawable/your_vector"
    ... />

menuItem.setIcon(R.drawable.your_vector);

这是不可能的,你必须使用PNG:(

 类似资料:
  • 我试图使用VectorDrawable作为单选切换按钮,但在API 17级设备中出现了“invalid drawable tag vector”错误。 我在一个片段中使用它,我在包装片段的活动中将setCompatVectorFromResourcesEnabled设置为true。 另外,我设置了 在build.gradle 这是视图xml, 这是一个矢量图像内容 有什么方法可以在android中

  • 需要什么步骤来使用这个库和构建我的应用程序与multidex支持?

  • 假设的例子 假设如下... 我的LiveData类如下所示: 同样,这不是真的很低效吗,因为它会在recyclerView.adapter中触发完全刷新吗?

  • 问题内容: 我在一个应用程序中工作,我们需要将对象保存为XML格式,并在以后需要时加载它们。为此,我使用JAXB将XML编组和解编回Java类。 我的问题是我必须在某个时候更改Java模型(通过添加,重命名或删除属性),结果,我将拥有不兼容的保存XML,无法将其绑定回新的类形式。 为了解决这个问题,每次必须进行更改时,我都会在一个新程序包(以其版本命名)下复制所有类的副本,并应用所请求的更改。并且

  • 查看v3规范,新消息似乎是有效的,难道旧的提供程序库(v3.2.13)不支持它吗?我查看了代码,发现了这个commit,在我看来,这似乎是引入更改的地方。 从我的测试来看,新的提供程序库(3.5.12)可以处理新旧格式,但如果类路径中同时存在新的提供程序库和旧的使用者库,http契约测试将失败,并出现运行时错误。 问题:

  • ngrok承诺有关其接口的兼容性和稳定性,以便您可以自信地构建集成顶部,知道在升级到较新版本时期望的更改。 兼容性承诺 Point Release (2.0.0 -> 2.0.1) - ngrok承诺在点发布之间没有突破性的变化 Minor Version Change (2.0 -> 2.1) - ngrok可能会进行小的更改,打破兼容性的次要版本更改。 ngrok承诺,任何破坏性更改将由一个版