【问题标题】:Getting app:drawableEndCompat instead of android:drawableEnd warning for Lollipop API 21 devices为 Lollipop API 21 设备获取 app:drawableEndCompat 而不是 android:drawableEnd 警告
【发布时间】:2023-04-06 06:46:01
【问题描述】:

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 等?

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

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

非常感谢您的任何建议。

【问题讨论】:

    标签: android android-studio android-vectordrawable


    【解决方案1】:

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

    如果您认为我不需要任何 Compat Support :您可以将应用程序的最小 SDK 从当前值增加到至少 21。然后您可以平静地使用关键字 drawableEnd 而不会发出任何警告。 此外,您可以选择为不同的 API 创建不同的布局文件,在 API 21 以下的布局文件中,使用drawableEndCompat,对于 API 21 及更高版本,使用drawableEnd。在我看来,您还可以检查是否可以在同一个地方使用这两个属性。我觉得他们也可以一起工作。

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

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

    【讨论】:

      【解决方案2】:

      自 API 21 起支持矢量可绘制对象,但随着时间的推移会添加新功能,甚至是矢量可绘制对象。使用 AppCompat 可能是个好主意,不用担心。

      在TextViews 上为compound drawables 着色已添加in API 23。该建议将您推向兼容变体,该功能被向后移植。

      • app:drawable*Compat
      • app:drawableTint 和 app:drawableTintMode

      如果您不使用复合可绘制着色,则可以使用平台版本的属性。

      • android:drawable*
      • android:drawableTint 和 android:drawableTintMode(在 API 23 中添加)

      【讨论】:

      • 即使我没有在我的 TextView 中使用任何 drawableTint 或 drawableTintMode。我还会收到那个警告吗?我可以理解,如果我尝试在小于 23 的设备上使用 drawableTint,可能会出现警告。
      • 抱歉不清楚,主要思想实际上是这样的:您正在使用 AppCompat,它会将您推向 AppCompat 属性,否则您可能会遇到意外行为。类似于colorPrimary 与android:colorPrimary 等等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2017-03-10
      相关资源
      最近更新 更多