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

Mak*_*dov 6 java android android-appcompat android-vectordrawable

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

  • ImageView的
  • TextView drawable
  • 菜单图标
  • 通知图标

XML和编程.

Mak*_*dov 31

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

compile 'com.android.support:appcompat-v7:26.0.2'
Run Code Online (Sandbox Code Playgroud)

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

android {
    ...
    defaultConfig {
        ...
        vectorDrawables.useSupportLibrary = true
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

通过矢量资产工作室导入矢量图像.

就是这样,你准备好了!


ImageView的

XML

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

<ImageView
    ...
    app:srcCompat="@drawable/your_vector" 
    ... />
Run Code Online (Sandbox Code Playgroud)

编程

直接来自资源ID:

imageView.setImageResource(R.drawable.your_drawable);
Run Code Online (Sandbox Code Playgroud)

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

Drawable vectorDrawable 
                = AppCompatResources.getDrawable(context, R.drawable.your_vector);
imageView.setImageDrawable(vectorDrawable);
Run Code Online (Sandbox Code Playgroud)

如果你想设置色调:

DrawableCompat.setTint
             (vectorDrawable, ContextCompat.getColor(context, R.color.your_color));
Run Code Online (Sandbox Code Playgroud)

TextView drawable

XML

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

编程

直接设置资源不起作用,您必须使用Drawable对象.以与获取相同的方式获取它ImageView并使用适当的方法设置它:

textView.setCompoundDrawablesWithIntrinsicBounds(vectorDrawable, null, null, null);
Run Code Online (Sandbox Code Playgroud)

菜单图标

没有什么特别的:

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

menuItem.setIcon(R.drawable.your_vector);
Run Code Online (Sandbox Code Playgroud)

声明:

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

  • 两个案例均为1+. (2认同)

归档时间:

查看次数:

3592 次

最近记录:

8 年,3 月 前