Android导航菜单关闭事件处理:如何实现状态栏颜色恢复?
处理侧边导航菜单关闭事件的方案
直接通过DrawerLayout的监听器来监听菜单的打开和关闭状态,比仅依赖onSupportNavigateUp()更可靠(能覆盖滑动关闭、点击外部关闭等所有场景),具体实现步骤如下:
- 获取DrawerLayout实例
在你的Activity中,先获取布局里的DrawerLayout组件:
DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
- 添加抽屉状态监听器
通过addDrawerListener()设置监听器,重写打开和关闭的回调方法,分别处理状态栏颜色变化:
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() { @Override public void onDrawerSlide(@NonNull View drawerView, float slideOffset) { // 抽屉滑动过程的回调,无需处理可留空 } @Override public void onDrawerOpened(@NonNull View drawerView) { // 菜单打开时修改状态栏颜色 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(getResources().getColor(R.color.drawer_opened_status_color)); } } @Override public void onDrawerClosed(@NonNull View drawerView) { // 菜单关闭时恢复原状态栏颜色 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(getResources().getColor(R.color.original_status_color)); } } @Override public void onDrawerStateChanged(int newState) { // 抽屉状态变化的回调,无需处理可留空 } });
- 调整原有逻辑
把你之前写在onSupportNavigateUp()里的状态栏颜色修改代码移到onDrawerOpened()中,避免重复触发和逻辑分散。
注意:
setStatusBarColor仅在API 21(Android 5.0)及以上版本生效,所以需要加上版本判断。
内容的提问来源于stack exchange,提问作者Witness Game
相关产品推荐
相关产品推荐

