警告:使用来自AppCompat的SwitchCompat或来自Material库的SwitchMaterial。

27

这两个对象(SwitchCompatSwitchMaterial)之间有什么区别?我已经试过它们,外观上它们是相同的。

顺便问一句,为什么他们移除了Switch类?你知道哪个UI元素将来会替代它吗?


androidx.appcompat.widget.SwitchCompat 对我有用。 - Zohab Ali
4个回答

18

SwitchMaterial

  • Material Components Library提供
  • 扩展了SwitchCompat
  • 默认使用Widget.MaterialComponents.CompoundButton.Switch样式,使用Theme.MaterialComponents中定义的颜色(如colorSecondarycolorSurfacecolorOnSurface),并在暗模式下应用Elevation Overlays

SwitchCompat

顺便问一下,他们为什么要删除Switch类?

Switch类没有被删除。它像其他小部件(如ButtonTextView等)一样由Android框架提供,而appcompat和material components库提供了它们的更新版本(如AppCompatButtonMaterialButton等)。

这些小部件有所不同。 使用AppCompat主题,有AppCompatViewInflater自动替换从布局文件中膨胀的所有核心Android小部件,使用那些小部件的AppCompat扩展(例如,Button被替换为AppCompatButton)。 使用Theme.MaterialComponents时,有MaterialComponentsViewInflater在膨胀时将某些框架小部件替换为Material Components小部件,如果使用了Material Components主题(例如,Button被替换为MaterialButton)。

对于SwitchMaterialSwitchCompat而言,这并不是真的。原因在于AppCompat的SwitchCompat实际上并没有继承自框架的Switch类。


24
为什么要进行这个更改?我们不能继续像以前一样使用Switch吗?SwitchMaterial和SwitchCompat有什么功能使它们值得转换? - Sollace

13

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

为了让所有 Android 版本上的 Switch 控件外观一致,我们使用 SwitchCompat。

enter image description here

SwitchCompat 是核心 Switch 控件的完整后移版本,将该控件的外观和功能带到旧版平台上。与此包中的其他小部件不同,SwitchCompat 不会自动用于使用元素的布局中。相反,您需要明确使用 <androidx.appcompat.widget.SwitchCompat> 和匹配的属性来设计布局。

SwitchMaterial 继承自 SwitchCompat,是一个创建材料主题开关的类。


5

切换视图在不同版本的Android上操作方式不同。如果您的应用程序在旧版本或新版本中运行,这可能会造成问题。为了解决这个问题,我们可以使用SwitchCompat,它在目前所有版本上的操作方式相同。

要进行调整,请转到xml代码,而不是switch。

// 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提供描述和摘要,就像使用SwitchPreferenceCompat一样,通过使用例如app:summaryOff属性来提供一个? - NeverEndingQueue

2

SwitchCompat

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

SwitchMaterial

它是SwitchCompat的扩展版本。它创建了一个材料主题开关。该类使用材料主题的属性来样式化Switch。因为SwitchCompat 没有扩展Switch,所以必须在布局XML中明确声明SwitchMaterial


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接