好的,我已经阅读过类似问题的大部分答案,但没有解决我的问题
gradle classpath 'com.android.tools.build:gradle:2.1.2'
android {
defaultConfig {
minSdkVersion 16
targetSdkVersion 24
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
compile 'com.android.support:recyclerview-v7:24.1.1'
compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:cardview-v7:24.1.1'
compile 'com.android.support:support-v4:24.1.1'
compile 'com.android.support:design:24.1.1'
}
activity.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ViewItem"
tools:ignore="MissingPrefix">
...
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_gravity="center_vertical"
android:layout_marginBottom="10dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="10dp"
android:foregroundGravity="center_vertical|center|center_horizontal"
app:srcCompat="@drawable/ic_car" />
...
</ScrollView>
vector ic_car.xml
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#5c5c5c"
android:pathData="M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21 .42 -1.42 1.01L3 12v8c0
.55 .45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55 .45 1 1 1h1c.55 0 1-.45
1-1v-8l-2.08-5.99zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5 .67 1.5
1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5 .67 1.5
1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z" />
<path android:pathData="M0 0h24v24H0z" />
</vector>
我的活动类扩展AppCompatActivity
,所有android:src
标记都更改为app:srcCompat
,但我仍然看到Invalid drawable tag vector
上的minSdkVersion
错误设置为{ {1}}。
答案 0 :(得分:2)
在我的情况下,崩溃发生是由于使用Resources.getDrawable(int)来获取前棒棒糖设备上的矢量绘图。我试图创建一个drawable进入 ImageView.setImageDrawable(Drawable)
Google Blog Post for Android Support Library 23.2:
从Android支持库23.3.0开始,支持向量drawables即可 只能通过app:srcCompat或setImageResource()加载。
解决方案:使用VectorDrawableCompat.create(Resources, int, Theme)创建drawable。
您也可以使用ImageView.setImageResource(int),但这会读取/解码UI线程上的位图。
答案 1 :(得分:1)
真相是,查看您的代码,它应该适用于任何版本的库,因为您只使用srcCompat属性。
我怀疑的一个问题是你的矢量是在drawable-21文件夹中,而在常规的Drawable文件夹中你有一个引用这些Drawables的单个文件。这是在库的早期版本中完成的方法,但由于下面的更改而不再起作用。只需将实际的矢量文件移动到Drawable文件夹即可
我们有时会通过将ImageView
更改为AppCompatImageView
来解决类似的问题。尽管图书馆应该自动执行此操作,但有时似乎没有。
如果矢量是复合图像的一部分,例如分层图像,则代码仍然可能会中断。或者它正在破坏您尚未发布代码的其他地方,例如,如果您在ImageButton上将向量设置为leftImage。正如@Zeke所回答的那样,这些功能已在23.3中删除。尽管如此,它在23.4中返回,通过在您的活动中添加以下内容使其可用
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
他们仍警告你它可能导致内存泄漏。请参阅https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.s48hqaw1u,但为了最低限度的使用,它应该不是问题。
一个简单的解决方法是创建Drawable并在代码中设置它。像这样的东西;
Drawable icon = AppCompatDrawableManager.get().getDrawable(context, resVectorID);
// Set it for example as a left image of button
button.setCompoundDrawablesWithIntrinsicBounds( icon, null, null, null );
我没有对此进行过测试,如果这会导致内存问题,我也没有想法。如果有人可以跟进,我会很高兴。
答案 2 :(得分:0)
更新到Android studio 2.2后,问题自行解决了
答案 3 :(得分:0)
我确实喜欢这个:
public static final Drawable getMyDrawable(Context context, int id) {
final int version = Build.VERSION.SDK_INT;
if (version >= 21) {
return ContextCompat.getDrawable(context, id);
} else {
return VectorDrawableCompat.create(context.getResources(), id, context.getTheme());
}
}