BottomNavigationView的使用
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的使用的更多相关文章
- 关于Android中使用BottomNavigationView切换横屏导致返回主页的问题
问题: 如图,"发现"页即为主页,然后我们切换到"我"页,一切正常. 那么问题来了,如果切换到"我"页后把手机横屏,则会出现下面的情况. 嗯 ...
- 第三十七篇-BottomNavigationVIew底部导航的使用
效果图: 添加底部导航和viewpaper 设置底部导航在底部 app:layout_constraintBottom_toBottomOf="parent" 新建四个fragme ...
- BottomNavigationView 使用
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.Cons ...
- Android 底部按钮BottomNavigationView + Fragment 的使用(二)
这里来试验BottomNavigationView + Fragment 底部按钮通过点击底部选项,实现中间的Fragment进行页面的切换. 使用BottomNavigationView 控件,实现 ...
- Android 底部按钮BottomNavigationView + Fragment + viewPager 的使用(一)
实现的效果,左右滑动,底部栏跟着滑动,中间加的是分帧的页面 上代码:主页面activity_main.xml <?xml version="1.0" encod ...
- BottomNavigationView结合ViewPager
BottomNavigationView是Google推出的底部导航栏组件,在没有这些底部导航组件之前,Android开发者多使用的是RadioGroup,在上一个项目开发中我们使用了Google的B ...
- 014 Android BottomNavigationView 底部导航组件使用
1.导入BottomNavigationView组件(点击下载按钮,安装组件) 2.新建菜单 (1)app--->src-->main--->res ,选中res目录右击new--- ...
- android BottomNavigationView 底部显示3个以上的item
你现在可以用app:labelVisibilityMode="[labeled, unlabeled, selected, auto] labeled 所有的标签都是可见的. unlabel ...
- BottomNavigationView 的使用
转载请注明出处:http://blog.csdn.net/wl9739/article/details/52875710 BottomNavigationView 很早之前就在 Material De ...
随机推荐
- ajax回调中执行window.open被拦截的解决办法
From:https://blog.csdn.net/winy_lm/article/details/60959751 ajax async设为false即同步调用 //去支付function got ...
- eslint规则记录
"off"或者0 //关闭规则关闭 "warn"或者1 //在打开的规则作为警告(不影响退出代码) "error"或者2 //把规则作为一个 ...
- Oracle 给字符串补空格、补0
利用lpad().RPAD()函数来实现给字符串补空格或补0的功能: 一.lpad()lpad函数将左边的字符串填充一些特定的字符其语法格式如下:lpad(string,n,[pad_string]) ...
- react常用命令
npm install -g create-react-appcreate-react-app my-appcd my-app/ 启动项目:npm start 安装依赖:npm install 编译: ...
- 《APP移动终端决胜之道视觉设计艺术》学习笔记
1.20-2.9 1.合理的层级化2.信息的整合(短信收发件箱),信息的整合就像创建文件夹,可以将相关的东西放在一起,以便于使用者搜索与查找3.(微信聊天界面)相比之下使用了对话框图形的界面,元素更加 ...
- Datatables跳转到指定页
因为项目用到Datatables发现在分页特别多时无法跳转到指定页,自己动手增加了#Datatables 跳转到指定页#功能,实现代码如下: table = $('#user-table').data ...
- java 中sendredirect()和forward()方法的区别
一.文章1 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重 ...
- oracle decode函数和 sign函数
流程控制函数 DECODE decode()函数简介: 主要作用: 将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1, ...
- mongodb节点配置指南
修改复制集节点的优先级 复制集节点的 priority 参数的值决定了选举中该节点的优先级.值越高,优先级越高. 我们可以通过修改复制集配置参数中 members 数组位置的优先级来修改对应机器的优先 ...
- webpack笔记一 起步
webpack笔记一 起步 安装 对于大多数项目,我们建议本地安装(--save-dev).这可以在引入突破式变更(breaking change)版本时,更容易分别升级项目. 起步 初始化项目 mk ...