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

2020年11月25日 41点热度 0条评论

Vector drawable不久前已添加到支持库,此后API发生了许多变化:Gradle标志,初始化程序块,选择器,自定义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 图像。

    仅此而已,您准备好了!

    影像检视

    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)无法处理棒棒糖之前的 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 :(