android - 我如何更改 BadgeDrawable Android 中的背景颜色

标签 android material-design mdc-components material-components-android

我想创建一个带有徽章的 bottomNavigationBar。

我已经用 com.google.android.material.bottomnavigation.BottomNavigationView 做到了,可以在 https://material.io/develop/android/components/bottom-navigation-view/ 找到.

但是徽章是红色的,我想要它是黄色的。我一直在阅读这里的文档:https://material.io/develop/android/components/badging/ .但我不清楚。

我已经尝试创建一个 badgeDrawable,设置背景颜色,调用函数 attachBadgeDrawable 并将 badgeDrawable 和底部导航 View 的 subview 传递给位置 3(这是我想要放置徽章的位置) ). 我不清楚的是第三个参数

这是我的导航 View 代码:

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottom_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@color/clr_white"
    app:elevation="0dp"
    app:menu="@menu/menu_bottom_navigator" />



BadgeDrawable badgeDrawable = BadgeDrawable.create(this);
           badgeDrawable.setBackgroundColor(getResources().getColor(R.color.app_yellow));
BadgeUtils.attachBadgeDrawable(badgeDrawable, mBottomNavigation.getChildAt(3), null);

文档说:

BadgeUtils.attachBadgeDrawable(badgeDrawable, anchor, null);

我原以为徽章应该是黄色的,但我却收到了 NPE

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myappclient.develop, PID: 15853
    io.reactivex.exceptions.OnErrorNotImplementedException: Attempt to invoke virtual method 'void android.view.View.getDrawingRect(android.graphics.Rect)' on a null object reference
        at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
        at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
        at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)
        at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:67)
        at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:200)
        at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)
        at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.getDrawingRect(android.graphics.Rect)' on a null object reference

我正在使用库版本“com.google.android.material:material:1.1.0-alpha07”,我的最小 API 是 19

最佳答案

我建议您将库从“alpha-07”更新为“alpha-08”。同样在您拥有 BottomNavigationView 的 Activity 中,您可以执行以下操作。这会将徽章背景颜色设置为蓝色。

第三名

    navView.menu.forEachIndexed { index, item ->
        if (index == 2) {
            val badgeDrawable = navView.getOrCreateBadge(item.itemId)
            badgeDrawable.backgroundColor = Color.BLUE
        }
    }

对于最后一个位置

    navView.menu.forEachIndexed { index, item ->
        if (index == navView.menu.size() - 1) {
            val badgeDrawable = navView.getOrCreateBadge(item.itemId)
            badgeDrawable.backgroundColor = Color.BLUE
        }
    }

关于android - 我如何更改 BadgeDrawable Android 中的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56882820/

相关文章:

html - 将图标添加到 MDC 卡

android - 声音池 : sample 1 not READY

android - 在 Lollipop 之前的设备上使用 CardView 的空白区域

android - 使用 Phonegap 在 Android 上的媒体播放器中打开 RTSP 链接

android - SlidingTabLayout 选项卡之间的通信

html - 无论屏幕大小如何,使一个 div 出现在相同的位置

javascript - MDC 网站 : mdc-select update hidden input value on change (non-native select box) | JavaScript (JS)

ios - MDCTextInputControllerOutlined 不对齐文本

android - 如何在android中同步声音播放?

java - 如何将视频放入apk中?