警告:使用 AppCompat 中的 SwitchCompat 或 Material 库中的 SwitchMaterial

Warning : Use SwitchCompat from AppCompat or SwitchMaterial from Material library

这两个对象(SwitchCompatSwitchMaterial)有什么区别?我试过了,从外观上看,它们是一样的。

顺便问一下,他们为什么要删除 Switch class?您知道将来应该用哪个 UI 元素代替它吗?

SwitchCompat

SwitchCompatCompoundButton 的扩展版本。 SwitchCompat 是旧 Switch 小部件的一个版本,在设备上返回到 API v7。它不会尝试在正常可用的那些设备上使用平台提供的小部件。

切换Material

它是 SwitchCompat 的扩展版本。它创建了一个 Material Themed Switch。此 class 使用 Material 主题的属性来设置 Switch 的样式。因为 SwitchCompat 不扩展 Switch,您必须在中显式声明 SwitchMaterial你的布局 XML.

SwitchMaterial:

  • Material Components Library
  • 提供
  • 扩展 SwitchCompat
  • 使用 Widget.MaterialComponents.CompoundButton.Switch 作为默认样式,在深色模式下使用 colors defined in the Theme.MaterialComponents (like colorSecondary, colorSurface and colorOnSurface) and applying the Elevation Overlays

SwitchCompat:

By the way, why did they remove the Switch class?

Switch class 未删除。它由 android 框架提供,就像其他小部件一样 ButtonTextView.. 并且 appcompat 和 material 组件库提供了它们的更新版本(如 AppCompatButton, MaterialButton...).

这些小部件有所不同。 使用 AppCompat 主题,AppCompatViewInflater 会自动替换核心 Android 小部件的所有用法,这些小部件通过这些小部件的 AppCompat 扩展从布局文件中膨胀(例如 Button替换为 AppCompatButton).
使用 Theme.MaterialComponentsMaterialComponentsViewInflater 在 inflation 时间用 Material 组件替换一些框架小部件,前提是正在使用 Material 组件主题(对于例如 Button 替换为 MaterialButton).

对于 SwitchMaterialSwitchCompat NOT true。原因是 AppCompat SwitchCompat 实际上不是从框架扩展 Switch class.

https://developer.android.com/reference/androidx/appcompat/widget/SwitchCompat

Switch 与 Android 的旧版本有不同的外观。我们使用 SwitchCompat 使所有 Android 版本的外观保持一致。

SwitchCompat is a complete backport of the core Switch widget that brings the visuals and the functionality of that widget to older versions of the platform. Unlike other widgets in this package, SwitchCompat is not automatically used in layouts that use the element. Instead, you need to explicitly use <androidx.appcompat.widget.SwitchCompat> and the matching attributes in your layouts.

SwitchMaterial 继承自 SwitchCompat。它是一个 class 创建一个 Material 主题开关。

根据您使用的 Android 版本不同,切换视图的操作也不同。如果您的应用在旧版本或新版本中 运行,这可能会导致问题。为了解决这个问题,我们可以使用 SwitchCompat,它在当前所有版本上的操作都是一样的。

要对此进行调整,请转到 xml 代码,而不是切换

// change from "Switch"
<androidx.appcompat.widget.SwitchCompat
        android:id="@+id/main_activity_sw_simulate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginTop="9dp"
        android:fontFamily="@font/coda"
        android:text="@string/switch_text"
        android:textColor="@color/onyx"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="TouchTargetSizeCheck" />