Значок дисплея сверху нижнего значка панели навигации

Я реализовал нижнее представление навигации в своем приложении, и я посмотрел каждый, где отобразить значки сверху значков как это, я задавался вопросом, возможно ли это даже реализовать. Любая справка ценится.Спасибо.

58
задан 9 March 2017 в 01:10

5 ответов

Добавление значков исходно поддерживается теперь, использование последней существенной зависимости добавляет, что это к Вашему build.gradle

    implementation 'com.google.android.material:material:1.1.0-alpha09'

в Вашем расположении добавляет это

<!-- The rest of your layout here ....-->

  <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottom_navigation"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:menu="@menu/bottom_nav_menu"
            />

затем, Вы можете всего

     val navBar  = findViewById<BottomNavigationView>(R.id.bottom_navigation)
     navBar.getOrCreateBadge(R.id.action_add).number = 2

, R.id.action_add для Вас был бы идентификатором пункта меню, Вы хотите поставить значок. Проверьте его от файла меню, который Вы подаете к BottomNavigationView.

Удостоверяются, что Ваша тема приложения находится в Теме. MaterialComponents

можно проверить его в стили или декларацию. для этого примера шахта была этим

     <style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@color/colorPrimary</item>
    </style>
35
ответ дан 1 November 2019 в 13:00

Значок был теперь добавлен как часть AndroidX BottomNavigationView BadgeDrawable. См. документы

fun setBadge(count: Int) {
    if (count == 0) {
        bottomNavigationView.removeBadge(R.id.ticketsNavigation)
    } else {
        val badge = bottomNavigationView.showBadge(R.id.ticketsNavigation)
        badge.number = count
        badge.backgroundColor = getColor(R.color.badge)
        badge.badgeTextColor = getColor(R.color.blackTextColor)
    }
}

// Menu:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/ticketsNavigation"
        android:icon="@drawable/vector_drawable_navbar_tickets"
        android:title="@string/tickets_title"/>
    ...
</menu>
3
ответ дан 1 November 2019 в 13:00

Попробуйте это однажды.

1) Создают XML-файл для значка (напр. notification_badge_view.xml)

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

    <ImageView
        android:id="@+id/badge"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_gravity="top|center_horizontal"
        android:layout_marginStart="10dp"
        android:gravity="center"
        android:padding="3dp"
        app:srcCompat="@drawable/notification_badge" />
</FrameLayout>

2) Создают drawable файл для формы точки уведомления (напр. badge_circle.xml)

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@color/colorAccent" />
    <stroke
        android:width="2dp"
        android:color="@android:color/white" />
</shape>

3) В Вашем действии onCreate метод добавляют представление значка к [1 114] BottomNavigationView

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_landing);

         addBadgeView();

    }

4), И addBadgeView метод ниже

private void addBadgeView() {
        try {
            BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationBar.getChildAt(0);
            BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(0); //set this to 0, 1, 2, or 3.. accordingly which menu item of the bottom bar you want to show badge
            notificationBadge = LayoutInflater.from(LandingActivity.this).inflate(R.layout.view_notification_badge, menuView, false);
            itemView.addView(notificationBadge);
            notificationBadge.setVisibility(GONE);// initially badge will be invisible 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Примечание: bottomNavigationBar является Вашим нижним представлением панели.

5) значок Обновления, чтобы показать и скрыться следующим методом

private void refreshBadgeView() {
        try {
            boolean badgeIsVisible = notificationBadge.getVisibility() != GONE;
            notificationBadge.setVisibility(badgeIsVisible ? GONE : VISIBLE);//makes badge visible and invisible 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

6) И точно сделать скрываются когда мы нажимающий на конкретную нижнюю страницу панели следующей строкой.

bottomNavigationBar.setOnNavigationItemSelectedListener(new 
BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) 
              {
                switch (menuItem.getItemId()) {
                    case R.id.bottom_bar_one:
                        //while moving to first fragment
                        notificationBadge.setVisibility(GONE);
                        break;
                    case R.id.bottom_bar_two:
                        //moving to second fragment
                        break;
                    case R.id.bottom_bar_three:
                        //moving to third fragment
                        break;
                }
                return true;
            }
        });
2
ответ дан 1 November 2019 в 13:00

ответ @Abel является лучшим, если Вы уже не имеете сложный набор тем и не имеете времени для изменения их всех.

Однако, если a) Вы торопитесь и если Вы используете библиотеку Google Material BottomNavigationView Панель или b) Вы захотите добавить свой собственный значок представления - затем, то принятый ответ не будет работать с com.google.android.material:material:1.1.0

, необходимо будет кодировать для иерархии другого представления, чем принятый ответ

  BottomNavigationItemView itemView = (BottomNavigationItemView) ((BottomNavigationMenuView) mBottomNavigation.getChildAt(0)).getChildAt(2);
  View badge = LayoutInflater.from(this).inflate(R.layout.navigation_dot, itemView, false);
  itemView.addView(badge);

, если Вы действительно захотите обновить свою тему и обновление

com.google.android.material:material:1.1.0-alpha09

затем все, что необходимо сделать вместо этого,

mBottomNavigation.getOrCreateBadge(R.id.navigation_menu_item_one).setNumber(YOUR_NUMBER);

, удаление и функции числа только присутствуют в 1.1.0-alpha09 версии (и выше)

1
ответ дан 1 November 2019 в 13:00

можно пользоваться этой библиотекой.. добавить значок на панели навигации

https://github.com/ahmedewess/Badged-BottomNavigationBar

enter image description here

-1
ответ дан 1 November 2019 в 13:00

Другие вопросы по тегам:

Похожие вопросы: