目标
我们常见的app,都有底部导航栏,今天我们采用fragement+navition来实现,当然换有其他的方案来也能实现,看自己的爱好。
步骤
1. Activity的布局文件(activity_main.xml)
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  android:layout_width="match_parent"  android:layout_height="match_parent">  <com.google.android.material.bottomnavigation.BottomNavigationView  android:id="@+id/bottom_navigation"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:background="@color/colorPrimaryDark"  app:itemTextColor="@color/white"  app:menu="@menu/bottom_navigation_menu" />  <fragment  android:id="@+id/fragmentContainer"  android:name="androidx.navigation.fragment.NavHostFragment"  android:layout_width="match_parent"  android:layout_height="match_parent"  app:defaultNavHost="true"  app:navGraph="@navigation/nav_graph" />  </androidx.coordinatorlayout.widget.CoordinatorLayout>2. 底部导航菜单(bottom_navigation_menu.xml)
<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android="http://schemas.android.com/apk/res/android">  <item android:id="@+id/nav_home" android:title="Home"></item>  <item android:id="@+id/nav_profile" android:title="Profile"></item>  <item android:id="@+id/nav_settings" android:title="Settings"></item>  <item android:id="@+id/nav_logout" android:title="Logout"></item>  
</menu>3. NavGraph文件(nav_graph.xml)
<?xml version="1.0" encoding="utf-8"?>  
<navigation xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto">  <fragment android:id="@+id/nav_home" android:name="com.example.myapp.HomeFragment" />  <fragment android:id="@+id/nav_profile" android:name="com.example.myapp.ProfileFragment" />  <fragment android:id="@+id/nav_settings" android:name="com.example.myapp.SettingsFragment" />  <fragment android:id="@+id/nav_logout" android:name="com.example.myapp.LogoutFragment" />  
</navigation>4. 在Activity中获取BottomNavigationView的实例,并为其添加监听器。核心部分功能
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);  
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {  @Override  public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {  switch (menuItem.getItemId()) {  case R.id.nav_home:  // 跳转到HomeFragment  break;  case R.id.nav_profile:  // 跳转到ProfileFragment  break;  case R.id.nav_settings:  // 跳转到SettingsFragment  break;  case R.id.nav_logout:  // 跳转到LogoutFragment  break;  }  return true; // 表示该事件已被处理,不再传递给其他监听器。如果返回false,则该事件将传递给其他监听器。  }  
});