如何以编程方式将VectorDrawable设置为ImageView的图像

Ham*_*ezi 45 android imageview android-vectordrawable

我想在Android Studio 中将一些vectorDrawables设置为ImageView.

我可以轻松设置png和jpg drawable,但是当我想设置VectorDrawable时,它在imageview上不起作用.

img.setImageResource(R.drawable.ic_home);
Run Code Online (Sandbox Code Playgroud)

ic_home是VectorDrawable,此代码不起作用.

小智 101

如果要使用矢量drawable(比API 21更少OR),请执行以下操作:

以编程方式设置图像(例如在您的活动中):

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

或者通过XML:

app:srcCompat="@drawable/your_vector_name"
Run Code Online (Sandbox Code Playgroud)

在您的应用中,build.gradle您需要包括:

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

对于少于API 21的矢量支持,请将以下内容添加到onCreate:

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);  
Run Code Online (Sandbox Code Playgroud)

  • 仍然不适用于KitKat,仅适用于> = 5.1,它可以与`setImageResource`一起使用 (6认同)
  • 对于KitKat,这仅适用于/sf/answers/2514286281/ (2认同)
  • AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 解决了我在Kitkat的问题 (2认同)

Jaw*_*poo 21

对于那些想要以编程方式加载矢量drawable用于其他用途的人,例如设置drawableLeft或其他用途,您可以使用:

Drawable drawable = AppCompatResources.getDrawable(context, drawableRes);
Run Code Online (Sandbox Code Playgroud)

上下文是AppCompatActivity.

  • 谢谢,我以前没见过这个AppCompatResources.每个SDK版本都会变得越来越糟糕. (4认同)

Pri*_*tel 17

根据官方的android开发人员博客,vectorDrawables在运行时没有对setImageResource()方法进行任何更改.

如果你在运行时更改drawables,你将能够 像以前一样使用相同的 setImageResource()方法 - 没有更改.使用AppCompat和app:srcCompat是将矢量绘图集成到应用程序中最简单的方法.

有关更多详细信息,请查看这篇精彩的文章AppCompat - Google Developer 的向量年龄.


san*_*mar 12

如果您关注向后兼容性,那么您应该使用AppCompatImageViewpf图像视图.仔细阅读下面的代码.

<android.support.v7.widget.AppCompatImageView
    android:id="@+id/iv_about"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
   app:srcCompat="@drawable/ic_vector_image"
    />
Run Code Online (Sandbox Code Playgroud)

java的

AppCompatImageView image = (AppCompatImageView) findViewById(R.id.iv_about);
image.setImageResource(R.drawable.ic_vector_image);
Run Code Online (Sandbox Code Playgroud)

它将服务于视角AppCompatImageView.

  • 不需要,根据文档"这将在您的布局中使用ImageView时自动使用,顶级活动/对话框由appcompat提供.您只需在编写自定义视图时手动使用此类." 所以你可以只使用ImageView,除非你扩展它. (3认同)