You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:55:18