警告:使用 AppCompat 中的 SwitchCompat 或 Material 库中的 SwitchMaterial
Warning : Use SwitchCompat from AppCompat or SwitchMaterial from Material library
这两个对象(SwitchCompat
和 SwitchMaterial
)有什么区别?我试过了,从外观上看,它们是一样的。
顺便问一下,他们为什么要删除 Switch
class?您知道将来应该用哪个 UI 元素代替它吗?
SwitchCompat
SwitchCompat 是 CompoundButton
的扩展版本。 SwitchCompat
是旧 Switch
小部件的一个版本,在设备上返回到 API v7
。它不会尝试在正常可用的那些设备上使用平台提供的小部件。
切换Material
它是 SwitchCompat
的扩展版本。它创建了一个 Material Themed Switch
。此 class 使用 Material 主题的属性来设置 Switch
的样式。因为 SwitchCompat
不扩展 Switch
,您必须在中显式声明 SwitchMaterial你的布局 XML.
- 由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
:
- 由androidx appcompat library
提供
- 使用
Widget.AppCompat.CompoundButton.Switch
作为默认样式
By the way, why did they remove the Switch class?
Switch
class 未删除。它由 android 框架提供,就像其他小部件一样 Button
、TextView
.. 并且 appcompat 和 material 组件库提供了它们的更新版本(如 AppCompatButton
, MaterialButton
...).
这些小部件有所不同。
使用 AppCompat
主题,AppCompatViewInflater
会自动替换核心 Android 小部件的所有用法,这些小部件通过这些小部件的 AppCompat 扩展从布局文件中膨胀(例如 Button
替换为 AppCompatButton
).
使用 Theme.MaterialComponents
有 MaterialComponentsViewInflater
在 inflation 时间用 Material 组件替换一些框架小部件,前提是正在使用 Material 组件主题(对于例如 Button
替换为 MaterialButton
).
对于 SwitchMaterial
和 SwitchCompat
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" />
这两个对象(SwitchCompat
和 SwitchMaterial
)有什么区别?我试过了,从外观上看,它们是一样的。
顺便问一下,他们为什么要删除 Switch
class?您知道将来应该用哪个 UI 元素代替它吗?
SwitchCompat
SwitchCompat 是 CompoundButton
的扩展版本。 SwitchCompat
是旧 Switch
小部件的一个版本,在设备上返回到 API v7
。它不会尝试在正常可用的那些设备上使用平台提供的小部件。
切换Material
它是 SwitchCompat
的扩展版本。它创建了一个 Material Themed Switch
。此 class 使用 Material 主题的属性来设置 Switch
的样式。因为 SwitchCompat
不扩展 Switch
,您必须在中显式声明 SwitchMaterial你的布局 XML.
- 由Material Components Library 提供
- 扩展
SwitchCompat
- 使用
Widget.MaterialComponents.CompoundButton.Switch
作为默认样式,在深色模式下使用 colors defined in theTheme.MaterialComponents
(likecolorSecondary
,colorSurface
andcolorOnSurface
) and applying the Elevation Overlays。
SwitchCompat
:
- 由androidx appcompat library 提供
- 使用
Widget.AppCompat.CompoundButton.Switch
作为默认样式
By the way, why did they remove the Switch class?
Switch
class 未删除。它由 android 框架提供,就像其他小部件一样 Button
、TextView
.. 并且 appcompat 和 material 组件库提供了它们的更新版本(如 AppCompatButton
, MaterialButton
...).
这些小部件有所不同。
使用 AppCompat
主题,AppCompatViewInflater
会自动替换核心 Android 小部件的所有用法,这些小部件通过这些小部件的 AppCompat 扩展从布局文件中膨胀(例如 Button
替换为 AppCompatButton
).
使用 Theme.MaterialComponents
有 MaterialComponentsViewInflater
在 inflation 时间用 Material 组件替换一些框架小部件,前提是正在使用 Material 组件主题(对于例如 Button
替换为 MaterialButton
).
对于 SwitchMaterial
和 SwitchCompat
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" />