У меня есть два MaterialButton
s в LinearLayout
, и я меняю их цвет фона и цвет текста в зависимости от некоторого внутреннего состояния, которое я переключаю при нажатии на любой из них. Он отлично работает во всех версиях Android выше леденец. Исходное состояние для них во всех версиях Android работает правильно, проблема, когда я переключаю цвета в леденце.
Вот фото исходного состояния.
Фотография правильного цвета во всех версиях Android выше Lollipop.
Фото того, что в данный момент происходит в Android Lollipop.
Я не знаю, в каком случае это. Я пробовал много разных вещей, но ни одна из них не сработала.
Вот XML-код файла макета
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<android.support.design.button.MaterialButton
android:id="@+id/handymanServicesButton"
style="@style/View.RoundedMaterialButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_medium"
android:layout_weight="1"
android:elevation="16dp"
android:onClick="@{view::handymanServices}"
android:text="@{viewModel.isHandymanUser() ? @string/handyman_services_button_label : @string/main_button_label}"
android:textAllCaps="false"
android:textSize="@dimen/text_size_small"
tools:text="@string/handyman_services_button_label" />
<android.support.design.button.MaterialButton
android:id="@+id/otherButton"
style="@style/RoundedMaterialButtonNotSelected"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_medium"
android:layout_weight="1"
android:elevation="16dp"
android:onClick="@{view::other}"
android:text="@string/other_button_label"
android:textAllCaps="false"
android:textSize="@dimen/text_size_small" />
</LinearLayout>
Стили, которые я применил к кнопке.
<style name="View.RoundedMaterialButton">
<item name="android:minHeight">@dimen/buttonHeight</item>
<item name="android:elevation">@dimen/cardElevation</item>
<item name="android:gravity">center</item>
<item name="rippleColor">@color/material_ripple_color</item>
<item name="cornerRadius">24dp</item>
<item name="android:textSize">14sp</item>
<item name="android:textStyle">bold</item>
<item name="backgroundTint">@color/colorAccent</item>
<item name="android:textAllCaps">true</item>
<item name="android:textColor">@android:color/white</item>
<item name="android:textAppearance">@style/TextAppearance.MaterialComponents.Button</item>
</style>
<style name="RoundedMaterialButtonNotSelected" parent="View.RoundedMaterialButton">
<item name="backgroundTint">@android:color/white</item>
<item name="android:textColor">@color/colorAccent</item>
</style>
Код во фрагменте, который меняет цвета.
private fun handymanServicesUi() {
binding.handymanServicesButton.backgroundTintList =
ContextCompat.getColorStateList(requireContext(), R.color.colorAccent)
binding.otherButton.backgroundTintList =
ContextCompat.getColorStateList(requireContext(), android.R.color.white)
binding.handymanServicesButton.setTextColor(Color.WHITE)
binding.otherButton.setTextColor(
ContextCompat.getColor(requireContext(), R.color.colorAccent))
}
fun handymanServices(@Suppress("UNUSED_PARAMETER") view: View) {
handymanServicesUi()
viewModel.switchToHandymanServices()
}
private fun otherUi() {
binding.handymanServicesButton.backgroundTintList =
ContextCompat.getColorStateList(requireContext(), android.R.color.white)
binding.otherButton.backgroundTintList =
ContextCompat.getColorStateList(requireContext(), R.color.colorAccent)
binding.handymanServicesButton.setTextColor(
ContextCompat.getColor(requireContext(), R.color.colorAccent))
binding.otherButton.setTextColor(Color.WHITE)
}
fun other(@Suppress("UNUSED_PARAMETER") view: View) {
otherUi()
viewModel.switchToOthers()
}