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导入。