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

Android Studio全屏Activity模板下如何保持WebView全屏状态

解决WebView切换应用返回后无法保持全屏的问题

我之前也碰到过一模一样的情况——用Android Studio的Fullscreen Activity模板开发,把TextView换成WebView后,启动时好好的全屏,切到别的应用再回来,状态栏和导航栏就冒出来了,怎么都回不去全屏。其实这是因为WebView在Activity从后台恢复时,会触发系统UI的状态变化,而原来的模板逻辑只在初始化和用户点击时处理全屏,没覆盖后台返回的场景。

下面是亲测有效的解决方法:

1. 重写onResume方法,强制恢复全屏

每次Activity回到前台时,主动调用隐藏系统UI的方法,确保全屏状态被恢复。在你的FullscreenActivity里添加:

@Override
protected void onResume() {
    super.onResume();
    // 回到前台时立刻触发全屏逻辑
    hide();
}

这个方法最简单直接,能解决大部分场景下的问题——毕竟每次切回来都会强制执行全屏操作。

2. 给WebView添加系统UI变化监听(增强稳定性)

有时候WebView的滚动、触摸交互可能会意外唤起系统UI,咱们可以给WebView加个监听,一旦发现系统UI显示出来,就自动触发隐藏逻辑:

在onCreate方法里初始化WebView之后,添加这段代码:

mContentView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
    @Override
    public void onSystemUiVisibilityChange(int visibility) {
        // 检查系统UI是否已经显示(比如状态栏/导航栏出来了)
        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
            // 延迟一会儿再隐藏,避免交互时频繁切换的突兀感
            delayedHide(AUTO_HIDE_DELAY_MILLIS);
        }
    }
});

3. 确认WebView的布局设置没问题

检查你的布局文件,确保WebView没有设置android:fitsSystemWindows="true"——这个属性会让视图为系统栏预留空间,破坏全屏效果。你的原布局里WebView是match_parent且没加这个属性,这点是对的,保持住就行。

完整修改后的关键代码片段

把上面的修改整合到你的Activity里,核心部分大概是这样:

public class FullscreenActivity extends AppCompatActivity {
    // ... 原有常量、Handler、Runnable等代码保持不变 ...

    private ActivityFullscreenBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityFullscreenBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        mVisible = true;
        mControlsView = binding.fullscreenContentControls;
        mContentView = binding.myWebView;

        // 添加系统UI变化监听
        mContentView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                    delayedHide(AUTO_HIDE_DELAY_MILLIS);
                }
            }
        });

        // ... 原有点击事件、dummyButton的TouchListener等代码保持不变 ...
    }

    @Override
    protected void onResume() {
        super.onResume();
        hide();
    }

    // ... 原有hide、show、toggle、delayedHide等方法保持不变 ...
}

这样修改后,不管是启动应用还是从后台切回来,WebView都能稳稳保持全屏状态了。

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:47:50