如何使用AppCompat库中的VectorDrawableCompat?

时间:2016-07-16 10:00:20

标签: android android-vectordrawable appcompat-v7-r23.2 appcompat-v7-r23.1

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

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

然后我将清单文件中的minsdkversion更改为11。我还在XML布局中将ImageView的{​​{1}}属性更改为android:src="@drawable/vector_circle"但我正在

app:srcCompat="@drawable/vector_circle"
Unexpected namespace prefix "app" found for tag ImageView 行上的

。我该如何解决这个问题?

SSCCE:

RES /抽拉/ vector_circle.xml:

app:srcCompat="@drawable/vector_circle"

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>

MainActivity.java:

<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); } } 的{​​{1}}元素更改为

res/layout/activity_main.xml

我还在ImageView目录中添加了<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/vector_circle" tools:ignore="MissingPrefix" />

layout-v21/activity_main.xml

并将res/添加到<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> 元素。

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

1 个答案:

答案 0 :(得分:2)

要解决此问题,您只需使用可以处理app:srcCompatAppCompatImageView而不是ImageView的窗口小部件。