【发布时间】:2016-07-16 10:00:20
【问题描述】:
我最初用minsdkversion 或21 (Lollipop) 编写了这个SSCCE,它运行良好。 但我的需要是在 pre-lollipop 中使用VectorDrawableCompat。 在 SSCCE 中,XML 布局中有一个ImageView,其中图像的来源是定义在res/drawable/目录。
最初,当minsdkversion 在manifest 中设置为21 时,我使用android:src="@drawable/vector_circle" 将矢量图形设置为ImageView 中的图像源。这很好用。
然后我将清单文件中的minsdkversion 更改为11。我还在 XML 布局中将ImageView 的android: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.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>
并将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