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

使用expo-av播放视频时Android全屏模式下系统导航栏无法隐藏

解决Expo AV Android全屏时导航栏无法隐藏的问题

针对你遇到的Expo AV全屏播放视频时Android导航栏无法隐藏的问题,以下是几个可行的排查和解决方向:

1. 调整导航栏隐藏的时机与方式

你的代码使用PLAYER_WILL_PRESENT事件触发隐藏,但Expo AV的全屏播放器可能在该事件之后通过原生逻辑重置了导航栏状态。可以尝试切换到PLAYER_DID_PRESENT事件,同时使用沉浸式模式替代单纯的导航栏隐藏:

import { VideoFullscreenUpdate } from 'expo-av';
import SystemNavigationBar from 'react-native-system-navigation-bar';

const onFullscreenUpdate = async ({ fullscreenUpdate }) => {
  switch (fullscreenUpdate) {
    case VideoFullscreenUpdate.PLAYER_DID_PRESENT:
      // 启用沉浸式模式,完全隐藏状态栏和导航栏
      await SystemNavigationBar.setImmersive(true);
      break;
    case VideoFullscreenUpdate.PLAYER_DID_DISMISS:
      // 恢复正常模式
      await SystemNavigationBar.setImmersive(false);
      await SystemNavigationBar.navigationShow();
      break;
  }
};

setImmersive(true)会让Android进入真正的沉浸模式,导航栏和状态栏会完全隐藏,仅在屏幕边缘滑动时临时显示,这种模式不容易被其他组件的原生逻辑覆盖。

2. 检查Expo AV的全屏配置

尝试在调用全屏播放器时传入自定义配置参数(部分版本支持):

playerRef.current?.presentFullscreenPlayer({
  preferredOrientation: 'landscape',
  // 若版本支持,可添加隐藏系统UI的相关配置
});

同时检查app.json中的Android全局配置,确保允许窗口调整系统栏:

{
  "expo": {
    "android": {
      "windowSoftInputMode": "adjustResize",
      "config": {
        "android": {
          "windowDrawsSystemBarBackgrounds": true,
          "statusBarColor": "transparent"
        }
      }
    }
  }
}

3. 确认依赖库的兼容性

确保react-native-system-navigation-bar版本与当前Expo SDK版本兼容,若版本不匹配可能导致API调用失效。尝试更新到最新兼容版本:

npm install react-native-system-navigation-bar@latest

4. Bare Workflow下的原生层调整

如果你的项目是Bare Workflow,可以直接修改Android原生代码,在全屏时强制隐藏导航栏:

在MainActivity.java中添加沉浸式逻辑:

import android.os.Bundle;
import android.view.View;
import com.facebook.react.ReactActivity;

public class MainActivity extends ReactActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 进入全屏时隐藏导航栏
    getWindow().getDecorView().setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_IMMERSIVE
      | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
      | View.SYSTEM_UI_FLAG_FULLSCREEN
    );
  }
}

该方式为全局生效,需结合Expo AV的全屏事件动态切换状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:40:04