此组件上的样式要求您的应用程序主题为Badgedrawable错误的Theme.MaterialComponents或后代

问题描述

打开应用程序时发生此错误

我在底部导航项中添加了新功能Badgdrawable

这是我的.xml文件,其中包含Bottomnavigation

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="43dp"
    android:layout_gravity="bottom"
    android:soundEffectsEnabled="true"
    android:theme="@style/Platform.MaterialComponents"
    app:itemRippleColor="@color/colorAccent"
    app:itemHorizontalTranslationEnabled="true"
    android:background="?android:attr/windowBackground"
    app:menu="@menu/menu_nav">

</com.google.android.material.bottomnavigation.BottomNavigationView>

文件显示错误的Java代码

BadgeDrawable badgeDrawable=navigationView.getorCreateBadge(R.id.nav_chat);
                     badgeDrawable.setBackgroundColor(Color.BLUE);
                     badgeDrawable.setBadgeTextColor(Color.BLACK);
                     badgeDrawable.setMaxCharacterCount(5);
                     badgeDrawable.setNumber(200);
                     badgeDrawable.setVisible(true);

这是Logcat

Process: com.example.dotchat,PID: 19593
    java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant).
        at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:248)
        at com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:222)
        at com.google.android.material.badge.BadgeDrawable.<init>(BadgeDrawable.java:360)
        at com.google.android.material.badge.BadgeDrawable.createFromAttributes(BadgeDrawable.java:293)
        at com.google.android.material.badge.BadgeDrawable.create(BadgeDrawable.java:261)
        at com.google.android.material.bottomnavigation.BottomNavigationMenuView.getorCreateBadge(BottomNavigationMenuView.java:641)
        at com.google.android.material.bottomnavigation.BottomNavigationView.getorCreateBadge(BottomNavigationView.java:673)
        at com.example.dotchat.DashboardActivity$1.onDataChange(DashboardActivity.java:78)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:200)

这是我对物质依赖的依赖

implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
    implementation 'com.google.firebase:firebase-messaging:20.2.4'
    implementation 'com.google.android.material:material:1.1.0-alpha10'
    implementation 'com.google.firebase:firebase-crash:16.2.1'
    implementation 'com.firebaseui:firebase-ui-database:6.2.0'

解决方法

文件src/main/res/values/styles.xml的内容应如下所示:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:navigationBarColor"> @android:color/transparent</item>
    <item name="android:statusBarColor"> @android:color/transparent</item>
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryVariant">@color/colorPrimaryVariant </item>
</style>

AppTheme是样式的父项吗?

编辑:根据@Gabriele Mariotti的评论进行编辑

,

显示此错误的原因是,在styles.xml文件中,您必须将基本应用程序主题更改为使用Theme.MaterialComponents

也许您正在使用

Theme.AppCompat.Light.DarkActionBar 

ThemeOverlay.AppCompat

因此进行更改

<style name="AppTheme" parent="Theme.MaterialComponents">
        
</style>