前言
相信大家都有接触到安卓底部导航栏的使用,点击底部不同的图标显示不同的页面实现导航功能。而实现这种功能有很多的方法,有原始线性布局LinearLayout + TextView,按钮组RadioGroup + RadioButton,还有BottomNavigationBar实现。最近学习了BottomNavigationBar使用,写这篇文章记录一下学习过程。
实现如图:
使用之前添加依赖:
implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.4'
模仿QQ音乐底部导航栏 如图下:
添加布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.ashokvarma.bottomnavigation.BottomNavigationBar
android:id="@+id/bottom_navigation_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
设置BottomNavigationBar
private void initBottomNavigationBar(){
BottomNavigationBar mBottomNavigationBar = findViewById(R.id.bottom_navigation_bar);
// 初始化导航栏
mBottomNavigationBar
.setTabSelectedListener(this)
.setMode(BottomNavigationBar.MODE_FIXED ) //MODE_FIXED样式,“填充模式”,未选中的Item不显示文字,选中的显示文字,有切换动画效果。
.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC)//BACKGROUND_STYLE_STATIC,"静态样式",点击没有波纹效果
.setActiveColor("#71C671")//选中颜色
// .setInActiveColor("#FFFAFA")//未选中颜色
.setBarBackgroundColor("#FFFFFF");//导航栏背景色
// 添加导航按钮
mBottomNavigationBar
.addItem(new BottomNavigationItem(R.drawable.ic_music02,"音乐馆"))
.addItem(new BottomNavigationItem(R.drawable.ic_recommend02,"推荐"))
.addItem(new BottomNavigationItem(R.drawable.ic_dynamic,"动态"))
.addItem(new BottomNavigationItem(R.drawable.ic_mine,"我的"))
.initialise();//完成设置后须调用此方法
}
用法说明:
setMode方法中,Mode有3个值可以设置,分别是:
1.MODE_DEFAULT
默认模式,如果Item的个数<=3就会使用MODE_FIXED模式,否则使用MODE_SHIFTING模式。
2.MODE_FIXED (固定大小)
填充模式,未选中的Item会显示文字,没有换挡动画。
3.MODE_SHIFTING (不固定大小)
换挡模式,未选中的Item不会显示文字,选中的会显示文字。在切换的时候会有一个像换挡的动画。
setBackgroundStyle方法中,BackgroundStyle也有3个值可以设置,分别是:
1.BACKGROUND_STYLE_DEFAULT
如果设置的Mode为MODE_FIXED,将使用BACKGROUND_STYLE_STATIC 。如果Mode为MODE_SHIFTING将使用BACKGROUND_STYLE_RIPPLE。
2.BACKGROUND_STYLE_STATIC
点击的时候没有水波纹效果,航条的背景色是白色,加上setBarBackgroundColor()可以设置成你所需要的任何背景颜色
BACKGROUND_STYLE_RIPPLE
点击的时候有水波纹效果,导航条的背景色是你设置的处于选中状态的 Item的颜色(ActiveColor),也就是setActiveColorResource这个设置的颜色