美文网首页
Androidx下的BottomNavigationView的使

Androidx下的BottomNavigationView的使

作者: jxtx | 来源:发表于2019-09-26 10:55 被阅读0次

    在更新到最新的androidx包下使用的使用时需要注意一下地方:
    1.导入的包名不一样

    <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bnv"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:paddingTop="0dp"
            android:background="#ffffff"
            app:itemIconSize="33dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:menu="@menu/bottom_nav_menu"
            app:labelVisibilityMode="labeled" />
    

    2.添加角标的方法
    a.添加直接的布局

     //获取整个的NavigationView
            BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigation.getChildAt(0);
    
            //这里就是获取所添加的每一个Tab(或者叫menu),
            View tab = menuView.getChildAt(3);
            BottomNavigationItemView itemView = (BottomNavigationItemView) tab;
    
            //加载我们的角标View,新创建的一个布局
            View badge = LayoutInflater.from(this).inflate(R.layout.menu_badge, menuView, false);
    
            //添加到Tab上
            itemView.addView(badge);
    
    
            TextView count = (TextView) badge.findViewById(R.id.tv_msg_count);
            count.setText(String.valueOf(1));
            count.setVisibility(View.VISIBLE);
    
            //如果没有消息,不需要显示的时候那只需要将它隐藏即可
    //        count.setVisibility(View.GONE);
    

    b.通过获取BottomNavigationView的控件布局来直接添加

      /**
         * BottomNavigationView显示角标
         *
         * @param viewIndex tab索引
         * @param showNumber 显示的数字,小于等于0是将不显示
         */
        private void showBadgeView(BottomNavigationView bottomNavigationView,int viewIndex, int showNumber) {
            // 具体child的查找和view的嵌套结构请在源码中查看
            // 从bottomNavigationView中获得BottomNavigationMenuView
            BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
            // 从BottomNavigationMenuView中获得childview, BottomNavigationItemView
            if (viewIndex < menuView.getChildCount()) {
                // 获得viewIndex对应子tab
                View view = menuView.getChildAt(viewIndex);
                // 从子tab中获得其中显示图片的ImageView
                View icon = view.findViewById(com.google.android.material.R.id.icon);
                // 获得图标的宽度
                int iconWidth = icon.getWidth();//注意:当直接在oncreate方法中使用值为0,因为整个界面没有创建完成,无法获取这个imageview宽
    //            int iconWidth = icon.getLayoutParams().width;
                // 获得tab的宽度/2
                int tabWidth = view.getWidth() / 2;//注意:当直接在oncreate方法中使用值为0,因为整个界面没有创建完成,无法获取这个BottomNavigationItemView宽
                // 计算badge要距离右边的距离
                int spaceWidth = tabWidth - iconWidth;
    
    
    
                // 显示badegeview
                new QBadgeView(this).bindTarget(view).setGravityOffset(spaceWidth, 3, false).setBadgeNumber(showNumber);
            }
        }
    

    这个需要注意的是icon的id,因为在Androidx包下,不是在support包下,所以跟网上大多数说的不一样


    image.png

    这个可以从源码里BottomNavigationItemView类中找的到


    image.png

    相关文章

      网友评论

          本文标题:Androidx下的BottomNavigationView的使

          本文链接:https://www.haomeiwen.com/subject/gymguctx.html