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
相关产品推荐
相关产品推荐

