首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java代码中获得可绘制的向量选择器

如何在Java代码中获得可绘制的向量选择器
EN

Stack Overflow用户
提问于 2018-10-23 17:30:22
回答 2查看 130关注 0票数 0

我使用了可在xml中绘制的向量选择器,它工作得很好,但当sdk <21时在Java代码中崩溃。

下面是我的xml用法:

代码语言:javascript
复制
<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

代码语言:javascript
复制
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/common_ic_back" />
</selector>

common_ic_back.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
Drawable d1 = getResources().getDrawable(R.drawable.common_selector_ic_back);

使用时崩溃

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

/common_selector_ic_back.xml

0x7f080065

2

代码语言:javascript
复制
icon2 = AppCompatResources.getDrawable(this, R.drawable.common_selector_ic_back);

失败,原因与相同

3

代码语言:javascript
复制
VectorDrawableCompat.create(context.getResources(), R.drawable.common_selector_ic_back, context.getTheme());

失败,日志为

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

有没有人遇到这个问题?你能告诉我如何让矢量选择器在硬件代码中可绘制吗?

解决方案:

活动必须为AppCompatActivity

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-24 09:38:25

将活动更改为extends

票数 0
EN

Stack Overflow用户

发布于 2018-10-23 17:55:22

解决方案:尝试以下步骤: 首先,将此行添加到您的 common_ic_back.xml

代码语言:javascript
复制
<vector
    ...
    android:tintMode="multiply"
    ...>

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

</vector>

然后,别忘了添加build.gradle(Module:app),否则这种方法在旧的安卓版本上不起作用。

代码语言:javascript
复制
defaultConfig {
    ....
    vectorDrawables.useSupportLibrary = true
    ....
}

最后,在使用该向量的onCreate()之前,在activity类中添加以下内容:

代码语言:javascript
复制
static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

试试看。希望能有所帮助。如果有任何疑问,请发表意见。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52945688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档