BottomNavigationView的使用

废话少说, 先看东西

  

依赖

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

布局 

//用这个控件需要添加 design包: implementation 'com.android.support:design:26.1.0'
//版本号和compileSdkVersion的版本号相关 <android.support.design.widget.BottomNavigationView
android: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">
<item
android:id="@+id/navigation_home"
android:icon="@drawable/home"
android:title="home" /> <item
android:id="@+id/navigation_msg"
android:icon="@drawable/msg"
android:title="msg" /> <item
android:id="@+id/navigation_info"
android:icon="@drawable/info"
android:title="info" /> <item
android:id="@+id/navigation_set"
android:icon="@drawable/set"
android:title="set" /> <item
android: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() {
@Override
public 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();
}
}

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

BottomNavigationView的使用的更多相关文章

  1. 关于Android中使用BottomNavigationView切换横屏导致返回主页的问题

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

  2. 第三十七篇-BottomNavigationVIew底部导航的使用

    效果图: 添加底部导航和viewpaper 设置底部导航在底部 app:layout_constraintBottom_toBottomOf="parent" 新建四个fragme ...

  3. BottomNavigationView 使用

    <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.Cons ...

  4. Android 底部按钮BottomNavigationView + Fragment 的使用(二)

    这里来试验BottomNavigationView + Fragment 底部按钮通过点击底部选项,实现中间的Fragment进行页面的切换. 使用BottomNavigationView 控件,实现 ...

  5. Android 底部按钮BottomNavigationView + Fragment + viewPager 的使用(一)

    实现的效果,左右滑动,底部栏跟着滑动,中间加的是分帧的页面        上代码:主页面activity_main.xml <?xml version="1.0" encod ...

  6. BottomNavigationView结合ViewPager

    BottomNavigationView是Google推出的底部导航栏组件,在没有这些底部导航组件之前,Android开发者多使用的是RadioGroup,在上一个项目开发中我们使用了Google的B ...

  7. 014 Android BottomNavigationView 底部导航组件使用

    1.导入BottomNavigationView组件(点击下载按钮,安装组件) 2.新建菜单 (1)app--->src-->main--->res ,选中res目录右击new--- ...

  8. android BottomNavigationView 底部显示3个以上的item

    你现在可以用app:labelVisibilityMode="[labeled, unlabeled, selected, auto] labeled 所有的标签都是可见的. unlabel ...

  9. BottomNavigationView 的使用

    转载请注明出处:http://blog.csdn.net/wl9739/article/details/52875710 BottomNavigationView 很早之前就在 Material De ...

随机推荐

  1. POJ P2777 Count Color——线段树状态压缩

    Description Chosen Problem Solving and Program design as an optional course, you are required to sol ...

  2. WDCP服务器升级之后伪静态缓存文件.htaccess读取失效

    当购买或者升级服务器之后,thinkphp3框架的默认缓存文件.htaccess读取失效,解决方法如下: 1.我的网站是thinkphp3 服务器环境是N+A模式 2.将网站根目录的.htaccess ...

  3. change grayscale to pseudo colouring using colormap in Matlab

    change grayscale to pseudo colouring using colormap in Matlab In matlab you can view a grayscale ima ...

  4. PRINCE2认证与其他项目管理认证标准有何不同?

    国际项目管理协会 (IPMA)根据国际能力基线建立了一种国际公认的标准,并由其各国协会译成各国语言.这是IPMA四级证书的基础,现在已在全世界推广.可喜的是,PRINCE2与这个标准高度一致. 美国项 ...

  5. 简单的3proxy配置

    timeouts 1 5 30 60 180 1800 15 60log "D:\Program Files\3proxy-0.6.1-x64\cfg\3proxy.log" Dl ...

  6. 为订阅内虚拟机批量安装并配置 Microsoft Anti-Malware 扩展

    本文提供了对订阅内的 Windows 经典部署虚拟机和资源管理器部署虚拟机执行批量安装并配置 Microsoft Anti-Malware 扩展的 PowerShell 脚本. 关于安装 Window ...

  7. Docker的一些常用命令

    # systemctl start docker //启动docker # systemctl restart docker //重启docker # systemctl enable docker ...

  8. CAShapeLayer的使用[1]

    CAShapeLayer的使用[1] 使用CoreAnimation绘制动画带来的系统开销非常的小,CoreAnimation通常都是使用GPU的. CAShapeLayer属于CoreAnimati ...

  9. 动态展开tableView的cell[1]

    动态展开tableView的cell[1] 源码地址:https://github.com/xerxes235/HVTableView 虽然作者写的demo很好看,可是,你很难理解他是怎么玩的-_-! ...

  10. FTP自动上传

    注:该脚本上传的压缩文件,通过文件资源管理器拿下来后会提示压缩文件损坏.使用 ftp -s:d:\audit_log\ftp_upload.txt 方法可行(http://www.cnblogs.co ...