美文网首页
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