Android 如何使用AppCompat库中的VectorDrawableCompat?

Android 如何使用AppCompat库中的VectorDrawableCompat?,android,android-vectordrawable,android-appcompat,Android,Android Vectordrawable,Android Appcompat,我最初用21(棒棒糖)的minsdkversion编写了这个SSCCE,效果很好。但我需要在棒棒糖前使用一个VectorDrawableCompat。在SSCCE中,XML布局中有一个ImageView,其中图像的源是res/drawable/目录中定义的矢量图形 最初,当清单中将minsdkversion设置为21时,我使用android:src=“@drawable/vector\u circle”将矢量图形设置为ImageView中的图像源。这很有效 然后我将清单文件中的minsdkver

我最初用
21
(棒棒糖)的
minsdkversion
编写了这个SSCCE,效果很好。但我需要在棒棒糖前使用一个
VectorDrawableCompat
。在SSCCE中,XML布局中有一个
ImageView
,其中图像的源是
res/drawable/
目录中定义的矢量图形

最初,当清单中将
minsdkversion
设置为
21
时,我使用
android:src=“@drawable/vector\u circle”
将矢量图形设置为
ImageView
中的图像源。这很有效

然后我将清单文件中的
minsdkversion
更改为
11
。我还在XML布局中将
ImageView
android:src=“@drawable/vector\u circle”
属性更改为
app:srccomat=“@drawable/vector\u circle”
但我越来越

Unexpected namespace prefix "app" found for tag ImageView
app:srcCompat=“@drawable/vector_circle”
line上的。我应该如何解决这个问题?

SSCCE:

<?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>
<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>
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
res/drawable/vector\u 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>
<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>
public class MainActivity extends Activity {

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

编辑:

<?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>
<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>
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
我将
res/layout/activity\u main.xml
ImageView
元素更改为

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/vector_circle"
        tools:ignore="MissingPrefix" />
并添加了
xmlns:tools=”http://schemas.android.com/tools“
框架布局
元素


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

要解决这个问题,您需要做的就是使用小部件,它可以处理
app:srcCompat
,也就是
AppCompatImageView
而不是
ImageView
,您看到了吗?它可能会有所帮助,请检查并写出结果:)@Vucko是的,正如您所看到的,我使用了
app:srcCompat
,而不是
android:srcCompat
。我还包括了
xmlns:app
名称空间。唯一不同的是,在他们的问题中,他们提到他们已经用
build.gradle
文件做了一些事情。我正在使用Eclipse,所以我没有做任何类似的事情,我只是在我的项目中包含了AppCompat-v7库。@Vucko此外,这不是lint错误。这是一个正确的错误(Eclipse显示红色的线和叉),它使项目无法编译。啊,我注意到你做了几乎所有你应该做的事情,这就是为什么我不能帮助你进一步定位问题:染料,我明白了。很抱歉我没有太多用处,但是当我使用向量时,我通常通过new->vector asset导入它们,然后从本地SVG导入。