问题描述
AS 4.0.1
在API 21及更高版本上使用app:drawableEndCompat instead of android:drawableEnd
警告
<TextView
android:id="@+id/tvCheckStock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/ic_pin_drop
android:gravity="center_vertical"/>
ic_pin_drop是使用Android Studio File | New | Vector Asset | Configure Vector Assert
创建的SVG(矢量可绘制)
在我的Build.gradle
文件中,我具有以下配置:
minSdkVersion 21
targetSdkVersion 29
vectorDrawables.useSupportLibrary true
因为最小的是API 21(这是Lollipop),所以我一直在考虑是否支持矢量可绘制对象,我们可以使用不兼容版本的DrawableEnd,DrawableStart等吗?
我当时认为compat版本适用于21年前的API级别。 Kitkat及以下。而且由于我没有达到最低要求,所以我不确定为什么会收到该警告。
如果不使用兼容版本,则这些设备上的现金将少于21。
非常感谢您的任何建议。
解决方法
从API 21开始就支持矢量可绘制对象,但是随着时间的推移,甚至向矢量可绘制对象添加了新功能。使用AppCompat可能是个好主意,不必为此担心。
在TextView
上添加了在复合可绘制对象 in API 23。建议将您推向compat变体,该功能已向后移植。
-
app:drawable*Compat
-
app:drawableTint
和app:drawableTintMode
如果您不使用复合可绘制着色,则可以使用平台的属性版本。
-
android:drawable*
-
android:drawableTint
和android:drawableTintMode
(已在API 23中添加)
此警告的主要目的是通过使VectorDrawables向后兼容,使它们在所有设备上看起来都一样。
通过使用“ Compat”,您将确保使用矢量资产不会使应用程序在API 21以下的设备上崩溃。简而言之,使用drawableEndCompat
将允许任何人在较早的版本上使用与drawableEnd
相同的功能蜜蜂。
现在您会想到我应该选择什么:
如果您使用的是drawableEndCompat
,则它将在每个设备上都能正常工作。据我所知,API大于21的设备会在内部将它们像普通drawableEnd
那样解开包装。
如果您选择使用drawableEnd
,它将仅适用于API 21及更高版本。
如果您认为我不需要任何Compat支持:您可以将您的App最低SDK从当前值增加到至少21。然后您可以和平使用drawableEnd
。
另外,您可以选择为不同的API创建不同的布局文件,在该布局文件中,对于低于API 21的布局文件,请使用drawableEndCompat
;对于高于21 API的布局文件,请使用drawableEnd
。我认为,您还可以检查是否可以在同一位置使用两个属性。我觉得他们也应该一起工作。
如果您不支持API 21以下的设备,则没有问题:您应该没有问题。另外,我还要告诉您一件事-Android Studio有时会发出警告或错误;即使你是对的。在这种情况下,请在菜单栏中单击“文件”选项,然后尝试使“无效/重新启动”选项生效。
对于TextView,您应该使用app:drawableEndCompat
(或开始,顶部,底部)而不是app:drawableEnd