【问题标题】:Could not use MaterialButtonToggleGroup though I can use MaterialButton?虽然我可以使用 MaterialButton,但无法使用 MaterialButtonToggleGroup?
【发布时间】:2020-02-01 04:00:50
【问题描述】:

我想在我的应用中实现这种外观:

我在活动中的 xml 代码看起来像这样:

<com.google.android.material.button.MaterialButtonToggleGroup
  android:id="@+id/toggleGroup"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">

  <com.google.android.material.button.MaterialButton
    android:id="@+id/button1"
    ... />

  <com.google.android.material.button.MaterialButton
    android:id="@+id/button2"
    ... />

  <com.google.android.material.button.MaterialButton
    android:id="@+id/button3"
    ... />
</com.google.android.material.button.MaterialButtonToggleGroup>

我迁移到了 androidx,并在我的样式中使用了材质组件,但由于某种原因,我得到一个运行时错误,上面写着:

Binary XML file: Error inflating class com.google.android.material.button.MaterialButtonToggleGroup

implementation "com.google.android.material:material:1.0.0"

不过,当在没有组的情况下使用 com.google.android.material.button.MaterialButton 时,它会工作得非常好,这意味着我使用了正确的样式和 gradle 实现。

我还尝试了以下方法:

  • 缓存无效
  • 多次删除并重新导入androidx.appcompat:appcompat:1.1.0com.google.android.material:material:1.0.0
  • 关闭并重新打开 android studio
  • 关闭项目后重新导入项目
  • 将 minSdkVersion 提高到 21 而不是 14(目标和编译 sdk 版本都是 28)

这是我的依赖项(以防其中一些引起某种冲突):

implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    implementation 'androidx.cardview:cardview:1.0.0'

    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'

    //Room Persistance Library
    def room_version = "2.1.0"
    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version"
    //Lifecycle Libraries from the Android Architecture Components
    def lifecyle_version = " 2.1.0"
    implementation "android.arch.lifecycle:extensions:$lifecyle_version"
    annotationProcessor "android.arch.lifecycle:compiler:$room_version"

    //External Libraries:
    implementation 'com.github.HITGIF:TextFieldBoxes:1.4.4'
    implementation "com.google.android.material:material:1.0.0"

这是我用于该活动的样式:

<style name="ThemeNewRoutine" parent="Theme.MaterialComponents.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

这是清单文件中的活动元素:

<activity
            android:name=".Views.NewRoutine.NewRoutineActivity"
            android:theme="@style/ThemeNewRoutine">

        </activity>

为什么 com.google.android.material.button.MaterialButton 工作得非常好,但 com.google.android.material.button.MaterialButtonToggleGroup 却不行。

另外,我发现以下属性在style.xml文件中使用时也无法解析(即使父级是Theme.MaterialComponents.Light):

  • colorPrimaryVariant
  • colorOnPrimary
  • colorSecondaryVariant
  • colorOnSecondary
  • colorOnError
  • 颜色表面
  • colorOnSurface
  • colorOnBackground

我不知道这是否会导致任何冲突,但我的活动扩展了 AppCompatActivity:

public class NewRoutineActivity extends AppCompatActivity

【问题讨论】:

  • 也试试 com.google.android.material:material:1.1.0-alpha10
  • @GabrieleMariotti 当我这样做时,我得到:AAPT:错误:资源 'attr/counterTextColor' 的重复值与配置
  • 这取决于 com.github.HITGIF:TextFieldBoxes:1.4.4。使用1.4.5

标签: java android android-studio material-components-android


【解决方案1】:

我在我的应用程序中遇到了同样的问题,最终可以通过将材料库更新到最新版本“1.2.0-alpha02”来解决它。

不幸的是,我不知道为什么它不适用于 v1.0.0,因为有一些示例适用于这个版本。

implementation 'com.google.android.material:material:1.2.0-alpha02'

【讨论】:

  • 非常感谢,会试试看。
  • 没错,即使是1.2.1现在也可以正常工作,但是当你显示警告对话框时,这个版本没有显示对话框按钮。
猜你喜欢
  • 2021-06-12
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
相关资源
最近更新 更多