【问题标题】:How to get vector selector drawable in Java code如何在 Java 代码中获取可绘制的矢量选择器
【发布时间】:2018-10-23 09:30:21
【问题描述】:

我在 xml 中使用了可绘制的矢量选择器,效果很好,但是当 sdk

这是我的 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: 文件 res/drawable/common_selector_ic_back.xml 来自可绘制资源 ID

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

【问题讨论】:

  • 你能粘贴一张你的 res 层次结构的图像,特别是 drawable 文件夹吗?
  • 请看有问题的图片正文。
  • 您不能直接将 Vector 与 一起使用。要解决此问题,请在我的解决方案中使用以下步骤。
  • final Drawable d = getDrawable(context, R.drawable.abc_vector_test); in AppCompatDrawableManager#checkVectorDrawableSetup 返回 true,VectorDrawableCompat 可以创建vector 资源,但不能创建selector 资源。

标签: android vector-graphics


【解决方案1】:

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

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

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

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

</vector>

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

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

最后,在activity 类中添加这个,在你使用这个向量的onCreate() 之前:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

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

【讨论】:

  • 我将step1 tintMode添加到vector,但调用getDrawable()时也崩溃,step2和step3我已经添加到build.gradle
  • 崩溃日志是怎么说的
  • android.content.res.Resources$NotFoundException: File res/drawable/common_selector_ic_back.xml from drawable resource ID 0x7f080065 我知道将我的活动更改为扩展 AppCompatActivity 的问题。
  • @JamlingLi 更换后问题解决了吗?
【解决方案2】:

更改 Activity 以扩展 AppCompatActivity

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多