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

Android如何不启动新Activity实现VideoView双击切换全屏播放

结论

该需求完全可以实现,不需要启动新的Activity就能完成全屏切换。

核心实现逻辑

不需要新Activity的核心原因是:你可以直接在当前Activity内调整控件可见性、Window属性和VideoView的布局参数,全程复用同一个VideoView实例,直播流不会中断。

具体实现步骤
  • 第一步:实现双击监听
    用系统自带的GestureDetector即可实现双击检测,不需要自己做点击间隔判断,核心代码如下:
    // 初始化双击检测器
    GestureDetector doubleTapDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            toggleFullScreen(); // 触发全屏切换
            return true;
        }
    });
    // 给VideoView绑定触摸事件,把事件透传给检测器
    videoView.setOnTouchListener((v, event) -> {
        doubleTapDetector.onTouchEvent(event);
        return true;
    });
    
  • 第二步:实现全屏切换逻辑
    只需要调整当前Activity的Window属性、其他控件可见性和VideoView的布局参数即可,核心代码如下:
    private boolean isFullScreen = false;
    // 单位转换方法,可选,用来恢复非全屏时的高度
    private int dp2px(int dpValue) {
        float density = getResources().getDisplayMetrics().density;
        return (int) (dpValue * density + 0.5f);
    }
    
    private void toggleFullScreen() {
        Window window = getWindow();
        if (isFullScreen) {
            // 退出全屏逻辑
            window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            // 恢复非全屏时需要显示的控件,比如标题栏、控制栏等
            titleBar.setVisibility(View.VISIBLE);
            playControlBar.setVisibility(View.VISIBLE);
            // 恢复VideoView的非全屏尺寸,按你自己原来的布局参数调整
            FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) videoView.getLayoutParams();
            params.width = FrameLayout.LayoutParams.MATCH_PARENT;
            params.height = dp2px(250);
            videoView.setLayoutParams(params);
            isFullScreen = false;
        } else {
            // 进入全屏逻辑
            window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            // 隐藏非全屏时的其他控件
            titleBar.setVisibility(View.GONE);
            playControlBar.setVisibility(View.GONE);
            // VideoView填满整个父布局
            FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) videoView.getLayoutParams();
            params.width = FrameLayout.LayoutParams.MATCH_PARENT;
            params.height = FrameLayout.LayoutParams.MATCH_PARENT;
            videoView.setLayoutParams(params);
            isFullScreen = true;
        }
    }
    
可选优化

如果需要跟着全屏切换横竖屏,直接在切换逻辑里加一行setRequestedOrientation(isFullScreen ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)即可,不需要重启Activity。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:57:03