BottomNavigationView的使用

废话少说, 先看东西

  

依赖

  implementation 'com.android.support:design:26.1.0'

布局 

//用这个控件需要添加 design包: implementation 'com.android.support:design:26.1.0'
//版本号和compileSdkVersion的版本号相关<android.support.design.widget.BottomNavigationViewandroid:id="@+id/bnvBottomBar"android:layout_width="match_parent"android:layout_height="50dp"android:background="#bb88f7ff"app:menu="@menu/bottom_bar" />

menu: bottom_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/navigation_home"android:icon="@drawable/home"android:title="home" /><itemandroid:id="@+id/navigation_msg"android:icon="@drawable/msg"android:title="msg" /><itemandroid:id="@+id/navigation_info"android:icon="@drawable/info"android:title="info" /><itemandroid:id="@+id/navigation_set"android:icon="@drawable/set"android:title="set" /><itemandroid:id="@+id/navigation_me"android:icon="@drawable/me"android:title="me" />
</menu>

java代码

//声明
private BottomNavigationView bnvBottomBar;//查找控件
bnvBottomBar = (BottomNavigationView) findViewById(R.id.bnvBottomBar);disableShiftingMode(bnvBottomBar);  //禁止偏移   -------->> 方法在后面
//disableItemScale(bnvBottomBar);   //禁止放大   -------->> 方法在后面//监听事件
bnvBottomBar.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {switch (item.getItemId()) {case R.id.navigation_home:Toast.makeText(MainActivity.this, "home", Toast.LENGTH_SHORT).show();break;case R.id.navigation_info:Toast.makeText(MainActivity.this, "info", Toast.LENGTH_SHORT).show();break;case R.id.navigation_msg:Toast.makeText(MainActivity.this, "msg", Toast.LENGTH_SHORT).show();break;case R.id.navigation_set:Toast.makeText(MainActivity.this, "set", Toast.LENGTH_SHORT).show();break;case R.id.navigation_me:Toast.makeText(MainActivity.this, "me", Toast.LENGTH_SHORT).show();break;}return true; //返回true, 返回false点击item没有任何效果
    }
});//点击切换item
bnvBottomBar.setSelectedItemId(R.id.navigation_home);

禁用item个数大于3时的平移及缩放效果

/*** 禁用item>=3时的平移及缩放(没有平移效果了, 但是图标和文字还有放大效果)* 出处: https://blog.csdn.net/zzyawei/article/details/81082257*/
@SuppressLint("RestrictedApi")
public static void disableShiftingMode(BottomNavigationView view) {try {BottomNavigationMenuView mMenuView = (BottomNavigationMenuView) view.getChildAt(0);Field mShiftingModeField = BottomNavigationMenuView.class.getDeclaredField("mShiftingMode");mShiftingModeField.setAccessible(true);mShiftingModeField.set(mMenuView, false);for (int i = 0; i < mMenuView.getChildCount(); i++) {BottomNavigationItemView itemView = (BottomNavigationItemView) mMenuView.getChildAt(i);itemView.setShiftingMode(false);itemView.setChecked(itemView.getItemData().isChecked());}} catch (Exception e) {e.printStackTrace();}
}

禁用item 缩放动画 - 该方法效果不太明显

/*** 禁用item 缩放动画(选中放大图标/文字 ---->> 图片静止不再放大, 文字会有细微的放大效果)* 出处: https://blog.csdn.net/zzyawei/article/details/81082257*/
@SuppressLint("RestrictedApi")
public static void disableItemScale(BottomNavigationView view) {try {BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);Field mLargeLabelField = BottomNavigationItemView.class.getDeclaredField("mLargeLabel");Field mSmallLabelField = BottomNavigationItemView.class.getDeclaredField("mSmallLabel");Field mShiftAmountField = BottomNavigationItemView.class.getDeclaredField("mShiftAmount");Field mScaleUpFactorField = BottomNavigationItemView.class.getDeclaredField("mScaleUpFactor");Field mScaleDownFactorField = BottomNavigationItemView.class.getDeclaredField("mScaleDownFactor");mSmallLabelField.setAccessible(true);mLargeLabelField.setAccessible(true);mShiftAmountField.setAccessible(true);mScaleUpFactorField.setAccessible(true);mScaleDownFactorField.setAccessible(true);final float fontScale = view.getResources().getDisplayMetrics().scaledDensity;for (int i = 0; i < menuView.getChildCount(); i++) {BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(i);TextView lagerObj = (TextView) mLargeLabelField.get(itemView);TextView smallObj = (TextView) mSmallLabelField.get(itemView);lagerObj.setTextSize(smallObj.getTextSize() / fontScale + 0.5f);mShiftAmountField.set(itemView, 0);mScaleUpFactorField.set(itemView, 1f);mScaleDownFactorField.set(itemView, 1f);itemView.setChecked(itemView.getItemData().isChecked());}} catch (Exception e) {e.printStackTrace();}
}

------------------------------------------->>  完  <<-------------------------------------------

转载于:https://www.cnblogs.com/geaosu/p/9805885.html

BottomNavigationView的使用相关推荐

  1. BottomNavigationView+ViewPager+Fragment仿微信底部导航栏

    目标: 要实现的界面如下: 此时,我们需要采用BottomNavigationView+ViewPager+Fragment,一点点的说起.首先要在app/build.gradle里添加: imple ...

  2. android横竖屏切换不刷新,关于Android中使用BottomNavigationView切换横屏导致返回主页的问题...

    ##问题: 如图,"发现"页即为主页,然后我们切换到"我"页,一切正常. 那么问题来了,如果切换到"我"页后把手机横屏,则会出现下面的情况. ...

  3. Android 底部导航栏的简单实现-BottomNavigationView

    在谷歌官方发布BottomNavigationView控件之前我们可以自己组合控件实现,比如LinearLayout + TextView(使用android:drawableTop属性+select ...

  4. BottomNavigationView处理只有2个tab的情况

    覆盖掉系统属性就行 <!--覆盖bottomNavigationView的属性--><dimen name="design_bottom_navigation_item_m ...

  5. Andoroid之BottomNavigationView右上角添加红点布局和自动跳转到底部具体第几个Tab

    一.需求 BottomNavigationView右上角添加红点布局和自动跳转到底部具体第几个Tab 我们知道BottomNavigationView是在google material里面的组件 gi ...

  6. android新材料设计,android - 如何实现新材料BottomAppBar为BottomNavigationView - SO中文参考 - www.soinside.com...

    解决了 基本上,而不是试图迫使菜单的资源,我需要的布局,我用这个方法,而不是,我只是把使用"空"元素作为@dglozano建议BottomAppBar内的LinearLayout. ...

  7. 取消android所有动画,android studio 取消BottomNavigationView的动画等

    app:labelVisibilityMode="labeled" 布局文件上添加上此句就可以让标签文字也显示出来了,但是缩放动画,还是会存在. 那么回到初始化view的activ ...

  8. android 返回图标布局,Android 开发BottomNavigationView学习

    前言 注意这个里介绍的是AndroidX的com.google.android.material.bottomnavigation.BottomNavigationView xml布局中 app:la ...

  9. Android开发笔记(一百六十九)利用BottomNavigationView实现底部标签栏

    在Android Studio上创建官方默认的首屏标签页面很方便,首先右击需要添加标签栏的模块,在弹出的右键菜单中依次选择"New"--"Activity"-- ...

最新文章

  1. 宁波大学计算机王老师,王翀_宁波大学研究生导师信息
  2. 0基础学python-零基础直接学习Python入门IT合适吗?
  3. JQuery获取元素的N种方法
  4. grace hopper_开源日,在Grace Hopper会议上建立FOSS技能
  5. 数据库周刊 | DBA 核心技能
  6. 使用Anaconda3配置多版本Python虚拟开发环境详细步骤
  7. 100款机器学习数据集
  8. session和cookie的内部原理
  9. 模型思维2-如何增加用户对于某个商品的购买意愿?
  10. 防御ddos攻击的免费防火墙
  11. 电脑很大,电脑内存很大为什么还是很卡
  12. 2010年6月3日晚18点23分
  13. VVC代码阅读(2)compressGOP函数(1)
  14. Ultra Light Waterproof Jacket 2014 Warm down Coats Cheap
  15. (转)归纳:数据库设计的六个阶段详解(有这一篇就够了)
  16. STATIC和静态分析的必要性
  17. html2canvas跨域踩坑日常
  18. 公众责任险与职业责任险的区别
  19. R语言 两种方法连接oracle以及将处理后的数据导入数据库中
  20. Linux安装MySQL8.0.29,并使用Navicat连接

热门文章

  1. es xxx_by_query
  2. python-day1-03-格式化输出
  3. 还在用 Redux,要不要试试 GraphQL 和 Apollo?
  4. Redis之Ubuntu开机启动
  5. linux安装软件方法汇总
  6. nmon--linux压力测试工具
  7. 到底什么才是用户体验度
  8. React中的纯组件
  9. 微型计算机接口部件的结构,微机接口课后习题解析.doc
  10. perl-regexp_使用Regexp :: Common在Perl中轻松进行数据验证