如何在Java代码中获取可绘制的矢量选择器

时间:2018-10-23 09:30:22

标签: android vector-graphics

我在xml中使用了向量选择器drawable,效果很好,但是在sdk <21时在Java代码中崩溃了。

这是我的xml用法:

<android.support.v7.widget.AppCompatTextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/common_selector_ic_back"/>

common_selecor_ic_back.xml

<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/common_ic_back" />
</selector>

common_ic_back.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
<path
    android:fillColor="#FFFFFFFF"
    android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>

但是我想更改代码中的drawableLeft,我尝试了三种解决方案,都失败了。

1

Drawable d1 = getResources().getDrawable(R.drawable.common_selector_ic_back);

崩溃

  

android.content.res.Resources $ NotFoundException:文件   可绘制资源ID中的res / drawable / common_selector_ic_back.xml

     

0x7f080065

2

icon2 = AppCompatResources.getDrawable(this, R.drawable.common_selector_ic_back);

失败的原因相同

3

VectorDrawableCompat.create(context.getResources(), R.drawable.common_selector_ic_back, context.getTheme());

日志失败

  

二进制XML文件的第2行标记要求viewportWidth> 0

有人遇到问题吗?您能告诉我如何在硬件代码中获取可绘制的矢量选择器。

解决方案:

活动必须为AppCompatActivity

2 个答案:

答案 0 :(得分:0)

解决方案:请尝试以下步骤:

首先,将此行添加到您的common_ic_back.xml

<vector
    ...
    android:tintMode="multiply"
    ...>

    ......
    ......

</vector>

然后,别忘了添加build.gradle(Module:app),否则该方法将不适用于旧版Android。

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

最后,在您使用此向量的activity之前的onCreate()类中添加此代码:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

尝试一下。希望能帮助到你。如有任何疑问,请发表评论。

答案 1 :(得分:0)

更改活动以扩展AppCompatActivity