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

标签 java android android-appcompat android-vectordrawable

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

  • ImageView
  • 可绘制的 TextView
  • 菜单图标
  • 通知图标

XML 和编程方式。

最佳答案

将最新的支持库添加到应用的 build.gradle 依赖项中:

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

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

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

通过Vector Asset Studio导入 vector 图.

就这样,你准备好了!


ImageView

XML

使用 app:srcCompat 属性代替 android:src:

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

以编程方式

直接来自资源 id:

imageView.setImageResource(R.drawable.your_drawable);

设置为 Drawable 对象(例如用于着色):

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

如果你想设置色调:

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

可绘制的 TextView

XML

没有简单的解决方案:XML 属性 android:drawableTop(Bottom etc) 无法处理 Lollipop 之前的 vector 图像。一种解决方案是 add initializer block to activity and wrap vector into another XML drawable .第二 - to define a custom TextView .

以编程方式

直接设置资源是行不通的,你必须使用Drawable对象。获取它的方式与 ImageView 相同,并使用适当的方法设置它:

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

菜单图标

没什么特别的:

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

menuItem.setIcon(R.drawable.your_vector);

通知:

impossible , 你必须使用 PNG :(

关于java - 如何通过最新的 Android 支持库正确使用向后兼容的 Vector Drawable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40678947/

相关文章:

java - Selenium Web 驱动程序 - 在循环内等待 (Java)

java - 比较 Java 时间的最佳方法

java - 使用原子变量时的内存排序

java - 我如何才能防止 LogCat 接收到我手机上的所有内容?

带有 Theme.AppCompat 的 Android 5.0 DatePicker

Android AppCompat 22.1.1 默认文本颜色和 ActionMode 样式

java - 使用 Java 图形 API 的数字线

android - 如何检查 TtsService(或 Android 服务)是否停止?

android - 如何从 Firestore 任务中获取响应代码

android - alertDialogTheme 不工作(AppCompat v23)