为 Lollipop API 21 设备获取 app:drawableEndCompat 而不是 android:drawableEnd 警告

ant*_*009 6 android android-studio android-vectordrawable

AS 4.0.1

app:drawableEndCompat instead of android:drawableEnd在 API 21 及更高版本上使用警告

 <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"/>
Run Code Online (Sandbox Code Playgroud)

ic_pin_drop 是使用创建的 SVG(矢量可绘制) Android Studio File | New | Vector Asset | Configure Vector Assert

在我的Build.gradle文件中,我有以下配置:

minSdkVersion 21
targetSdkVersion 29
vectorDrawables.useSupportLibrary true
Run Code Online (Sandbox Code Playgroud)

由于最小值是 API 21,它是 Lollipop,我在想矢量可绘制对象是开箱即用的,我们可以在没有兼容版本的情况下使用 DrawableEnd、DrawableStart 等?

我在想兼容版本适用于 21 之前的 API 级别。奇巧及以下。由于我没有针对最低限度,我不确定为什么我会收到该警告。

如果不使用兼容版本,这将导致这些设备上的现金少于 21。

非常感谢您的任何建议。

Anu*_*mar 9

此警告背后的主要动机是通过使它们向后兼容,使您的 VectorDrawables 在所有设备上看起来都一样。通过使用“Compat”,您将确保使用矢量资产不会使 API 21(棒棒糖)以下设备的应用程序崩溃。简而言之,使用drawableEndCompat将允许任何人使用drawableEnd旧 API(<21)的相同功能。现在您会想我应该选择什么:如果您使用的是drawableEndCompat,它将在每个设备中按您的预期工作。drawableEnd据我所知,API 超过 21 的设备会在内部正常地解开它们。如果您选择使用drawableEnd,它将仅适用于 API 21 及更高版本。

如果您认为我不需要任何兼容支持:您可以将应用程序的最小 SDK 从当前值增加到至少 21。然后您可以在drawableEnd没有任何警告的情况下和平使用关键字。此外,您可以选择为不同的 API 创建不同的布局文件,在这些布局文件中,API 21 以下的使用drawableEndCompat和 API 21 及以上使用drawableEnd。在我看来,您还可以检查是否可以在同一个地方使用这两个属性。我觉得他们也可以一起工作。

如果您不支持 API 21 以下的设备,则没有问题:您应该没有问题/警告。另外,我还需要告诉你一件事——Android Studio 有时会抛出警告或错误;即使你是对的。在这种情况下,如果您认为自己是正确的,您应该在单击菜单栏中的文件选项后尝试无效/重新启动选项。我还建议对长时间使用系统或始终保持睡眠模式的每个人尝试重新启动系统。

因此,对于 a TextView,您应该使用app:drawableEndCompat(或开始,顶部,底部)而不是app:drawableEnd