BottomNavigationView的使用
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的使用相关推荐
- BottomNavigationView+ViewPager+Fragment仿微信底部导航栏
目标: 要实现的界面如下: 此时,我们需要采用BottomNavigationView+ViewPager+Fragment,一点点的说起.首先要在app/build.gradle里添加: imple ...
- android横竖屏切换不刷新,关于Android中使用BottomNavigationView切换横屏导致返回主页的问题...
##问题: 如图,"发现"页即为主页,然后我们切换到"我"页,一切正常. 那么问题来了,如果切换到"我"页后把手机横屏,则会出现下面的情况. ...
- Android 底部导航栏的简单实现-BottomNavigationView
在谷歌官方发布BottomNavigationView控件之前我们可以自己组合控件实现,比如LinearLayout + TextView(使用android:drawableTop属性+select ...
- BottomNavigationView处理只有2个tab的情况
覆盖掉系统属性就行 <!--覆盖bottomNavigationView的属性--><dimen name="design_bottom_navigation_item_m ...
- Andoroid之BottomNavigationView右上角添加红点布局和自动跳转到底部具体第几个Tab
一.需求 BottomNavigationView右上角添加红点布局和自动跳转到底部具体第几个Tab 我们知道BottomNavigationView是在google material里面的组件 gi ...
- android新材料设计,android - 如何实现新材料BottomAppBar为BottomNavigationView - SO中文参考 - www.soinside.com...
解决了 基本上,而不是试图迫使菜单的资源,我需要的布局,我用这个方法,而不是,我只是把使用"空"元素作为@dglozano建议BottomAppBar内的LinearLayout. ...
- 取消android所有动画,android studio 取消BottomNavigationView的动画等
app:labelVisibilityMode="labeled" 布局文件上添加上此句就可以让标签文字也显示出来了,但是缩放动画,还是会存在. 那么回到初始化view的activ ...
- android 返回图标布局,Android 开发BottomNavigationView学习
前言 注意这个里介绍的是AndroidX的com.google.android.material.bottomnavigation.BottomNavigationView xml布局中 app:la ...
- Android开发笔记(一百六十九)利用BottomNavigationView实现底部标签栏
在Android Studio上创建官方默认的首屏标签页面很方便,首先右击需要添加标签栏的模块,在弹出的右键菜单中依次选择"New"--"Activity"-- ...
最新文章
- 宁波大学计算机王老师,王翀_宁波大学研究生导师信息
- 0基础学python-零基础直接学习Python入门IT合适吗?
- JQuery获取元素的N种方法
- grace hopper_开源日,在Grace Hopper会议上建立FOSS技能
- 数据库周刊 | DBA 核心技能
- 使用Anaconda3配置多版本Python虚拟开发环境详细步骤
- 100款机器学习数据集
- session和cookie的内部原理
- 模型思维2-如何增加用户对于某个商品的购买意愿?
- 防御ddos攻击的免费防火墙
- 电脑很大,电脑内存很大为什么还是很卡
- 2010年6月3日晚18点23分
- VVC代码阅读(2)compressGOP函数(1)
- Ultra Light Waterproof Jacket 2014 Warm down Coats Cheap
- (转)归纳:数据库设计的六个阶段详解(有这一篇就够了)
- STATIC和静态分析的必要性
- html2canvas跨域踩坑日常
- 公众责任险与职业责任险的区别
- R语言 两种方法连接oracle以及将处理后的数据导入数据库中
- Linux安装MySQL8.0.29,并使用Navicat连接