一、准备工作
底部导航栏是Android应用中常见的一种导航方式,在用户使用过程中具有方便、直观的优点。为了实现一个高效的底部导航栏,我们需要从以下几个方面做好准备工作。
1、引入第三方库
Android官方提供了BottomNavigationView控件可以实现底部导航栏的基本功能,但是如果我们想要实现一些高级功能(如动态图标、未读消息提醒等),则需要使用第三方库。BottomNavigationViewEx是一款比较实用的第三方库,可以用于对BottomNavigationView控件的扩展,可以支持动态图标、未读消息提醒、超过3个item时可以滚动等一系列的功能。
2、设计底部导航栏图标
底部导航栏上的图标是用户使用的最直观入口,应该选择易于识别、易于理解的图标,可以参考Material Design中规定的系统图标, 保证图标的可见性和辨识度。
3、规划导航栏布局
在布局的设计中,应该考虑到BottomNavigationView作为底部导航栏的核心,需要占用固定的高度,从而限制界面中其它部分的高度。在设计底部导航栏中,需要考虑合理的布局设计,保证各个Tab之间的分隔不模糊,布局不出现错位现象。
dependencies {
implementation 'com.android.support:design:28.0.0'
implementation 'com.github.ittianyu:BottomNavigationViewEx:2.0.4'
}
二、实现底部导航栏
1、使用BottomNavigationView
在xml布局文件中,需要使用BottomNavigationView控件对底部导航栏进行实现。例如:
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_gravity="bottom"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@color/bottom_navigation_colors_selector"
app:itemTextColor="@color/bottom_navigation_colors_selector"
app:menu="@menu/navigation" />
其中,id是唯一标志导航栏的参数,layout_width和layout_height分别为导航栏的宽度和高度,itemBackground为导航栏的背景颜色,itemIconTint和itemTextColor为导航栏上图标和文本的颜色,app:menu="@menu/navigation"为导航栏中的菜单项,需要在res/menu/目录下新建一个menu文件夹,并在其中新建一个xml布局文件navigation.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/ic_home"
android:title="Home" />
<item
android:id="@+id/navigation_dashboard"
android:icon="@drawable/ic_dashboard"
android:title="Dashboard" />
<item
android:id="@+id/navigation_notifications"
android:icon="@drawable/ic_notifications"
android:title="Notifications" />
</menu>
其中,id为每个菜单项的唯一标志,icon为每个菜单项的图标,title为每个菜单项的标题。
2、使用BottomNavigationViewEx扩展库
如果想要实现一些高级功能(如动态图标、未读消息提醒等),需要使用BottomNavigationViewEx扩展库。
在xml布局文件中,需要使用com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx控件对底部导航栏进行实现。例如:
<com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_gravity="bottom"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@color/bottom_navigation_colors_selector"
app:itemTextColor="@color/bottom_navigation_colors_selector"
app:menu="@menu/navigation"
app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
app:tab_mode="fixed"
app:tab_animation="ripple" />
其中,必须添加的两个参数是app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"和app:tab_animation="ripple",其中前者表示在滚动界面时可以隐藏底部导航栏,后者表示选中图标时有一个波纹效果,当然还有很多可选参数可以根据具体需求进行设置。
三、示例代码
下面是一个完整的示例代码,包含了底部导航栏的基本实现和BottomNavigationViewEx扩展库的使用示例:
public class MainActivity extends AppCompatActivity {
private BottomNavigationViewEx mBottomNavigationViewEx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mBottomNavigationViewEx = findViewById(R.id.navigation);
mBottomNavigationViewEx.enableAnimation(false);
mBottomNavigationViewEx.enableShiftingMode(false);
mBottomNavigationViewEx.enableItemShiftingMode(false);
mBottomNavigationViewEx.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.navigation_home:
// do something
return true;
case R.id.navigation_dashboard:
// do something
return true;
case R.id.navigation_notifications:
// do something
return true;
}
return false;
}
});
}
}
其中,enableAnimation表示禁用默认动画、enableShiftingMode表示禁用默认的移位模式、enableItemShiftingMode表示禁用默认的移位模式,这些可以防止界面抖动、提高UI效率。
四、总结
通过使用BottomNavigationView控件和BottomNavigationViewEx扩展库,我们可以轻松地实现一个高效的Android底部导航栏,为用户提供方便、直观的界面操作。