Material Design 3 MaterialSwitch, используемый в макете включения, не меняет визуальное состояние.
Material Design 3 MaterialSwitch, используемый в макете включения, не меняет визуальное состояние при касании или сдвиге вправо.
Посмотрите, что произойдет, когда я коснусь или сдвину включенный переключатель материала:состояние MaterialSwitch не отмечено. Состояние MaterialSwitch проверено.
Обратите внимание, что положение и цвет дорожки слайдов не такие, как они должны выглядеть в соответствии с задокументированным ожидаемым поведением .
Значок большого пальца изменится, но большой палец не будет сдвигаться вправо при изменении цвета дорожки. (Это не встроенное поведение, но оно дает понять, что что-то не работает.)
Подтверждено, что логическое значение isChecked MaterialSwitch меняется с false на true (журнал Android Studio).
Многоразовый макет включения Standard_include_layout.xml:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="wasChecked" type="Boolean" />
</data>
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/check_switch"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:enabled="true"
android:checked="@={wasChecked}" />
...
Включите файлstandard_include_layout.xml в XML макета фрагмента:
...
<include
android:id="@+id/includedLayout"
layout="@layout/standard_include_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:wasChecked="@={viewmodel.wasChecked}" />
...
Установите состояние значка во фрагменте:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
...
viewModel.wasChecked.observe(viewLifecycleOwner) {
includedLayout.checkSwitch.isChecked = it
if (it == true)
checkSwitch.thumbIconDrawable = AppCompatResources.getDrawable(context, R.drawable.ic_checkmark)
else checkSwitch.thumbIconDrawable = null
}
ViewModel LiveData val referenced:
val wasChecked = MutableLiveData<Boolean>().apply {
value = false
}
Если включаемый макет не задействован. Все работает, как указано в документации. Коснитесь или сдвиньте вправо, чтобы изменить положение ползунка слайда, изменить цвет дорожки и установить значок ползунка.
Есть идеи, что не так?
1 ответ
Присоединение setOnCheckedChangeListener программно вместо наблюдения за значением привязки для изменения будет работать.
includedLayout.checkSwitch.setOnCheckedChangeListener { buttonView, isChecked ->
viewModel.wasChecked.value = isChecked
// To-do: Figure out how to change the thumb icon here, if it's even possible; using buttonView did not work.
}
// Workaround for being unable to set thumb icon within setOnCheckedChangeListener.
viewModel.wasChecked.observe(viewLifecycleOwner) {
// Set thumb icon.
if (isChecked == true)
aMaterialSwitch.thumbIconDrawable =
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_checkmark)
else
aMaterialSwitch.thumbIconDrawable = null
}