如何在按下返回键时完美处理底部导航栏。
如何在按下返回键时完美处理底部导航栏。
我正在设计一个底部导航栏,但是我的底部导航栏显示得并不完美。
我的MainActivity类:
public class MainActivity extends AppCompatActivity { private static final String SELECTED_ITEM = "selected_item"; private BottomNavigationView bottomNavigationView; private Toolbar toolbar; private MenuItem menuItemSelected; private int mMenuItemSelected; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { selectFragment(item); return true; } }); // 默认加载第一个Fragment FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.frameLayout, new AnnouncementFragment()); fragmentTransaction.commit(); if (savedInstanceState != null) { mMenuItemSelected = savedInstanceState.getInt(SELECTED_ITEM, 0); menuItemSelected = bottomNavigationView.getMenu().findItem(mMenuItemSelected); } else { menuItemSelected = bottomNavigationView.getMenu().getItem(0); } selectFragment(menuItemSelected); } private void selectFragment(MenuItem item) { Fragment fragment = null; Class fragmentClass; switch (item.getItemId()) { case R.id.action_announcement: fragmentClass = AnnouncementFragment.class; break; case R.id.action_menu: fragmentClass = MenuFragment.class; break; case R.id.action_menu_reports: fragmentClass = ReportFragment.class; break; case R.id.action_setting: fragmentClass = SettingFragment.class; break; default: fragmentClass = AnnouncementFragment.class; } try { fragment = (Fragment) fragmentClass.newInstance(); } catch (Exception e) { e.printStackTrace(); } FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.frameLayout, fragment).commit(); } @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt(SELECTED_ITEM, mMenuItemSelected); super.onSaveInstanceState(outState); } @Override public void onBackPressed() { MenuItem homeItem = bottomNavigationView.getMenu().getItem(0); if (mMenuItemSelected != homeItem.getItemId()) { selectFragment(homeItem); } else { super.onBackPressed(); } } }
我的返回按钮也没有正常工作:
@Override public void onBackPressed() { MenuItem homeItem = bottomNavigationView.getMenu().getItem(0); if (mMenuItemSelected != homeItem.getItemId()) { selectFragment(homeItem); } else { super.onBackPressed(); } }
我该如何解决这个问题呢?因为底部菜单在栏上的分布不均匀。如何正确维护菜单空间以避免不均匀分布。
这里我附上我在AVD上获得的结果: