Как отобразить значок на элементах bottomNavigationView android? - PullRequest
0 голосов
/ 25 марта 2019

Я видел этот вопрос - Отображать значок в верхней части иконки нижней панели навигации и решил добавить свои собственные значки в мой bottomNavigationView. Во-первых, я создал специальный макет моего значка:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/counter_badge"
        android:layout_width="wrap_content"
        android:layout_height="20dp"
        android:layout_gravity="top|center_horizontal"
        android:layout_marginStart="20dp"
        android:gravity="center"
        android:textSize="12sp"
        android:textStyle="bold"
        android:ellipsize="end"
        android:textAlignment="center"
        android:textColor="@color/white"
        android:padding="3dp"
        android:background="@drawable/badge"/>
</FrameLayout>

затем я добавляю некоторую информацию в значок textView в моей деятельности:

BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(0);

notificationBadge = LayoutInflater.from(this).inflate(R.layout.notification_badge, menuView, false);
TextView textView = notificationBadge.findViewById(R.id.counter_badge);

textView.setText("15");

itemView.addView(notificationBadge);

но, как я вижу, я могу работать только с одним элементом зрения, когда я пытался изменить с 0 на 1 элемент, я получил эту ошибку:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.support.design.internal.BottomNavigationMenuView.getChildAt(int)' on a null object reference

тогда я пытался использовать специальные идентификаторы предметов, но я получаю похожую ошибку. Может быть, кто-то знает, как добавлять значки в предметы, которые я хочу?

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Просто добавьте значок в BottomNavigationView как:

 private lateinit var bottomNavItemView: BottomNavigationItemView
 private var messageBadgeView: View? = null

 val mBottomNavigationMenuView = getChildAt(0) as BottomNavigationMenuView
 val view = mBottomNavigationMenuView.getChildAt(1)
 bottomNavItemView = view as BottomNavigationItemView

 messageBadgeView = LayoutInflater.from(this@Activity)
          .inflate(R.layout.item_message_count_badge,
                        mBottomNavigationMenuView, false)

 messageBadgeView!!.badgeCount.text = "99+"

 //Add badge
 bottomNavItemView.addView(messageBadgeView)

 //Or Remove badge
 bottomNavItemView.removeView(messageBadgeView)
1 голос
/ 25 марта 2019

Вы должны изменить свой код на этот

BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(1);

Редактировать

Чтобы иметь больше элементов со значком, вам нужно создать другой макет и так далее

BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(0);

notificationBadge = LayoutInflater.from(this).inflate(R.layout.notification_badge, menuView, false);
TextView textView = notificationBadge.findViewById(R.id.counter_badge);
textView.setText("15");
itemView.addView(notificationBadge);

BottomNavigationMenuView menuView1 = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
BottomNavigationItemView itemView1 = (BottomNavigationItemView) menuView1.getChildAt(1);

notificationBadgeOne = LayoutInflater.from(this).inflate(R.layout.notification_badge_one, menuView1, false);
TextView textView = notificationBadgeOne.findViewById(R.id.counter_badge);
textView.setText("15");
itemView1.addView(notificationBadgeOne);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...