1、布局文件
<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="0dp" android:layout_marginEnd="0dp" android:background="?android:attr/windowBackground" app:labelVisibilityMode="labeled" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/bottom_nav_menu" />
2、代码使用
@BindView(R.id.nav_view) BottomNavigationView nav_view; private ArrayList<Fragment> framents = new ArrayList<Fragment>(); private FragmentManager fragmentManager = getSupportFragmentManager(); private FragmentTransaction fragmentTransaction; private int mCurrent = -1;
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); framents.add(Fragment1.newInstance()); framents.add(Fragment2.newInstance()); framents.add(Fragment3.newInstance()); framents.add(Fragment4.newInstance()); fragmentTransaction = fragmentManager.beginTransaction(); for (int i = 0; i < framents.size(); i++) { Fragment fragment = framents.get(i); fragmentTransaction.add(R.id.main_frame, fragment); fragmentTransaction.hide(fragment); } fragmentTransaction.commitAllowingStateLoss(); switchFragment(0); nav_view.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); }
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.navigation_home: BarUtils.setStatusBarLightMode((Activity) mContext, false); switchFragment(0); return true; case R.id.navigation_dashboard: BarUtils.setStatusBarLightMode((Activity) mContext, true);//改变状态栏上方的字体颜色 switchFragment(1); return true; case R.id.navigation_notifications: BarUtils.setStatusBarLightMode((Activity) mContext, false); switchFragment(2); return true; case R.id.navigation_mine: BarUtils.setStatusBarLightMode((Activity) mContext, false); switchFragment(3); return true; } return false; } };
private void switchFragment(int index) { if (index != mCurrent) { fragmentTransaction = fragmentManager.beginTransaction(); for (int i = 0; i < framents.size(); i++) { Fragment fragment = framents.get(i); if (index == i) { fragmentTransaction.show(fragment); } if (i == mCurrent) { fragmentTransaction.hide(fragment); } } fragmentTransaction.commit(); mCurrent = index; } }