Android API 21上的材质切换按钮问题

时间:2020-10-18 13:13:16

标签: android material-design android-button material-components-android

我使用像这样的材质切换按钮组

    <com.google.android.material.button.MaterialButtonToggleGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:singleSelection="true">

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_topso"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_height="wrap_content"

  android:layout_width="wrap_content"          android:text="@string/topo" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_averages"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/average" />

    </com.google.android.material.button.MaterialButtonToggleGroup>

但是在运行应用程序时,出现以下错误而崩溃:

 java.lang.IllegalStateException: Attempted to get ShapeAppearanceModel from a MaterialButton which has an overwritten background.
        at com.google.android.material.button.MaterialButton.getShapeAppearanceModel(MaterialButton.java:1169)
        at com.google.android.material.button.MaterialButtonToggleGroup.addView(MaterialButtonToggleGroup.java:244)
        at android.view.ViewGroup.addView(ViewGroup.java:3709)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:810)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)

我无法解决!!如何解决此问题?

材料版本:“ 1.3.0-alpha03”

样式:

    <style name="MaterialAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primaryDark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="android:buttonStyle">@style/ButtonStyle</item>
    <item name="android:background">@android:color/transparent</item>
    <item name="floatingActionButtonStyle">@style/FloatingButtonStyle</item>
</style>

1 个答案:

答案 0 :(得分:0)

您正在使用:

<com.google.android.material.button.MaterialButton
   android:background="@drawable/about"

使用android:background中的MaterialButton,您将覆盖默认背景。这意味着MaterialButton不会使用自己的MaterialShapeDrawable作为背景(以及ShapeAppearanceModel)。
这似乎是一个错误,但您可以解决,将android:background中的MaterialButton删除。