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已经执行,但页面仍然显示,大概率是窗口主题配置问题:- 检查该Activity的主题是否配置了
android:windowIsTranslucent、android:windowIsFloating这类悬浮/透明属性,这类属性会导致关闭动画异常,视觉上看起来没有关闭 - 可以在调用
finish后手动指定退出动画,避免视觉残留:
finish() overridePendingTransition(0, android.R.anim.fade_out)- 检查该Activity的主题是否配置了
方案4:排查任务栈异常
如果存在该Activity重复创建的情况,可以在AndroidManifest中给该Activity配置android:launchMode="singleTop"避免多实例,必要时可以调用finishAndRemoveTask()直接将Activity从任务栈中移除。
内容的提问来源于stack exchange,提问作者Logic Gupta
相关产品推荐
相关产品推荐

