【问题标题】:How to use VectorDrawableCompat from the AppCompat library?如何使用 AppCompat 库中的 VectorDrawableCompat?
【发布时间】:2016-07-16 10:00:20
【问题描述】:

我最初用minsdkversion21 (Lollipop) 编写了这个SSCCE,它运行良好。 但我的需要是在 pre-lollipop 中使用VectorDrawableCompat 在 SSCCE 中,XML 布局中有一个ImageView,其中图像的来源是定义在res/drawable/目录。

最初,当minsdkversion 在manifest 中设置为21 时,我使用android:src="@drawable/vector_circle" 将矢量图形设置为ImageView 中的图像源。这很好用。

然后我将清单文件中的minsdkversion 更改为11。我还在 XML 布局中将ImageViewandroid:src="@drawable/vector_circle" 属性更改为app:srcCompat="@drawable/vector_circle"但我得到了

Unexpected namespace prefix "app" found for tag ImageView

app:srcCompat="@drawable/vector_circle" 线上。我应该如何解决这个问题?

SSCCE:

res/drawable/vector_circle.xml:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:width="465dp"
     android:height="420dp"
     android:viewportHeight="600"
     android:viewportWidth="600" >

    <group>

        <path android:strokeColor="#2196F3"
            android:strokeWidth="2"
            android:pathData="M150,10 L75,200 L225,200 Z" />

    </group>

</vector>

activity_main:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/vector_circle" /><!-- app:srcCompat="@drawable/vector_circle" -->

</FrameLayout>

MainActivity.java:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

编辑:

我将res/layout/activity_main.xmlImageView 元素更改为

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/vector_circle"
        tools:ignore="MissingPrefix" />

我还添加了layout-v21/activity_main.xmlres/ 目录:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/vector_circle" /><!-- app:srcCompat="@drawable/vector_circle" -->

</FrameLayout>

并将xmlns:tools="http://schemas.android.com/tools" 添加到FrameLayout 元素。

预编译错误消失了。但是当我在 Lollipop 设备上运行该应用程序时,矢量图形绘制得非常好,但如果我在一个棒棒糖设备上运行该应用程序,应用程序不会失败,但根本没有绘制矢量图形。

【问题讨论】:

  • 你看到this question了吗?它可能会有所帮助,检查并写下结果:)
  • @Vucko 是的,如您所见,我使用了app:srcCompat,而不是android:srcCompat。我也包含了xmlns:app 命名空间。唯一不同的是,在他们的问题中,他们提到他们已经对build.gradle 文件做了一些事情。我正在使用 Eclipse,所以我没有做任何类似的事情,我只是在我的项目中包含了 AppCompat-v7 库。
  • @Vucko 此外,这不是 lint 错误。这是正确的错误(Eclipse 显示红色的下划线和交叉)导致项目无法编译
  • 是的,我注意到你几乎做了所有应该做的事情,这就是为什么我不能帮助你进一步定位问题:D
  • 是的,我可以看到。好吧,真的很抱歉我的用处不大,但是当我使用矢量时,我通常通过new->矢量资产导入它们并从本地SVG导入。

标签: android android-vectordrawable android-appcompat


【解决方案1】:

解决此问题所需要做的就是使用可以处理app:srcCompat 的小部件,即AppCompatImageView 而不是ImageView

【讨论】:

    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2019-02-01
    相关资源
    最近更新 更多