Android中下滑退出全屏模式时如何显示ActionBar?
Android全屏退出后恢复ActionBar的解决方案
监听系统UI可见性变化
通过给DecorView添加系统UI可见性监听器,捕捉导航栏/状态栏从隐藏到显示的事件,触发ActionBar恢复逻辑:
mContext.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(visibility -> { // 判断导航栏和状态栏是否已显示 boolean navVisible = (visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; boolean statusVisible = (visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0; if (navVisible && statusVisible) { // 调整系统UI布局 mContext.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN ); // 显式显示ActionBar if (mContext instanceof AppCompatActivity) { ((AppCompatActivity) mContext).getSupportActionBar().show(); } else { ((Activity) mContext).getActionBar().show(); } } });
直接显式恢复ActionBar
如果确认全屏退出时机,可直接调用ActionBar的显示方法,配合系统UI参数调整:
// 恢复ActionBar显示 if (mContext instanceof AppCompatActivity) { ((AppCompatActivity) mContext).getSupportActionBar().show(); } else { ((Activity) mContext).getActionBar().show(); } // 设置对应系统UI属性 mContext.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN );
关键注意点
- 确保Activity主题未强制隐藏ActionBar(如
Theme.NoActionBar),若使用Toolbar需对应调用Toolbar.setVisibility(View.VISIBLE)。 SYSTEM_UI_FLAG_IMMERSIVE_STICKY模式下,系统UI会在无交互时自动重新隐藏,若需保持ActionBar常驻,可改用非Sticky的沉浸式模式,或在监听器中处理二次隐藏的情况。
内容的提问来源于stack exchange,提问作者neobie
相关产品推荐
相关产品推荐

