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

Android VideoView全屏Activity按下返回键无法关闭问题求助

Android VideoView全屏Activity按返回键无法关闭解决方案

首先优先确认onBackPressed方法是否被正常触发,可以先在重写的方法中加日志验证,再根据触发情况选择对应方案:

  • 方案1:适配新版系统返回回调机制
    从AndroidX ComponentActivity 1.0.0开始,官方推荐使用OnBackPressedDispatcher处理返回事件,替代直接重写onBackPressed,避免事件被其他注册的回调拦截。在Activity的onCreate方法中添加如下代码即可:

    onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            finish()
        }
    })
    

    如果仍要使用重写onBackPressed的方式,可以补充调用父类方法,避免内部逻辑异常:

    override fun onBackPressed() {
        super.onBackPressed()
        finish()
    }
    
  • 方案2:处理View层的按键拦截
    如果日志验证onBackPressed没有被调用,说明返回按键事件被VideoView或者外层布局拦截了,可以给VideoView设置按键监听处理返回逻辑:

    videoView.setOnKeyListener { _, keyCode, event ->
        if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_UP) {
            finish()
            return@setOnKeyListener true
        }
        false
    }
    
  • 方案3:排查窗口配置异常
    如果确认finish已经执行,但页面仍然显示,大概率是窗口主题配置问题:

    1. 检查该Activity的主题是否配置了android:windowIsTranslucent、android:windowIsFloating这类悬浮/透明属性,这类属性会导致关闭动画异常,视觉上看起来没有关闭
    2. 可以在调用finish后手动指定退出动画,避免视觉残留:
    finish()
    overridePendingTransition(0, android.R.anim.fade_out)
    
  • 方案4:排查任务栈异常
    如果存在该Activity重复创建的情况,可以在AndroidManifest中给该Activity配置android:launchMode="singleTop"避免多实例,必要时可以调用finishAndRemoveTask()直接将Activity从任务栈中移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 11:45:05