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

时间:2016-12-12 09:48:11

标签: android imageview android-vectordrawable

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

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

img.setImageResource(R.drawable.ic_home);

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

8 个答案:

答案 0 :(得分:82)

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

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

imageView.setImageResource(R.drawable.ic_left_arrow_blue); 

或通过XML:

app:srcCompat="@drawable/your_vector_name"

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

android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

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

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);  

答案 1 :(得分:17)

根据官方android developer blog,vectorDrawables在运行时没有对setImageResource()方法进行任何更改。

  

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

有关详细信息,请查看Google Developer撰写的这篇精彩文章AppCompat — Age of the vectors

答案 2 :(得分:17)

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

Drawable drawable = AppCompatResources.getDrawable(context, drawableRes);

其中上下文是AppCompatActivity。

答案 3 :(得分:11)

如果您关注向后兼容性,那么您应该使用AppCompatImageView代替pf图像视图。请仔细阅读以下代码。

<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"
    />

的java

AppCompatImageView image = (AppCompatImageView) findViewById(R.id.iv_about);
image.setImageResource(R.drawable.ic_vector_image);

它将提供app:srcCompat的视角。

答案 4 :(得分:3)

使用Java代码:

SELECT `tbl_leave`.`id`, `tbl_leave`.`staff_id`, `tbl_leave`.`type_id`, `tbl_leave`.`start_date`, `tbl_leave`.`end_date`, 
`tbl_leave`.`total_days`, `tbl_leave`.`reason`, `tbl_leave_type`.`type`, `tbl_employment`.`com_id` as `comid`, `tbl_staff`.`name`
FROM `tbl_leave` JOIN 
     `tbl_leave_type`
     ON `tbl_leave_type`.`id` = `tbl_leave`.`type_id` JOIN
     `tbl_employment`
     ON `tbl_employment`.`staff_id` = `tbl_leave`.`staff_id` JOIN     
     `tbl_staff`
     ON `tbl_staff`.`id` = `tbl_leave`.`staff_id`

和XML使用:

formate_img.setImageResource(R.drawable.ic_text);//ic_text is a Vector Image

答案 5 :(得分:2)

我在回收站视图中有一个向量,我正在使用img.setImageResource(R.drawable.ic_home),它没有像其他图像在回收站视图的某个项目中形成一样正常工作。然后我使用了img.setImageDrawable(activity.getResources().getDrawable(R.drawable.ic_home))这个工作。

答案 6 :(得分:1)

使用此:

android.support.v7.widget.AppCompatImageButton, 
android.support.v7.widget.AppCompatImageView,
android.support.v7.widget.AppCompatTextView 

而不是ImageButtonImageView

如果使用矢量类型图像。主要用于自定义视图。

答案 7 :(得分:-2)

从您的可绘制文件夹中删除两个文件夹,然后重建您的项目,它将正常运行enter image description here