【发布时间】:2019-04-07 09:16:27
【问题描述】:
我在LinearLayout 中有两个MaterialButtons,我根据单击它们中的任何一个时切换到的某些内部状态来更改它们的背景颜色和文本颜色。它适用于棒棒糖以上的所有 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()
}
【问题讨论】:
-
试试
com.google.android.material.button.MaterialButton而不是android.support.design.button.MaterialButton -
第一个用于androidX库。这里不是这种情况。
-
我建议您使用新库而不是旧库,我认为这里可能就是这种情况。
-
我在 Playground 应用中尝试了新的。它也有同样的问题。
-
从xml设置
backGroundTintList为selector可能会解决问题。
标签: android xml android-layout colors material-design