问题描述
最近在开发 APP 的时候涉及到视频播放,用的自带的 VideoView 和 MediaController 实现的,不过发现一个小问题,当底部的 MediaController 显示的时候返回键无效,试了重写 onBackPress、dispatchKeyEvent 等,返回键按下的时候没有一个被触发,百度基本找不到这种问题,大部分都是自定义控制条了,随后去 stackoverflow 上搜了一下,还是有好多一样问题的,不过上面的回答我都试了,基本都是重写 dispatchKeyEvent、onBackPress 等,我这边触发不了这几个方法,所以都不行。
可以一直显示的 MyMediaController
默认的 MediaController 会自动隐藏,重写 show 方法就行了
inner class MyMediaController(context: Context) : MediaController(context) { override fun show(timeout: Int) { super.show(0) } override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { Log.d(TAG, "onKeyDown") return super.onKeyDown(keyCode, event) } override fun dispatchKeyShortcutEvent(event: KeyEvent?): Boolean { Log.d(TAG, "dispatchKeyShortcutEvent") return super.dispatchKeyShortcutEvent(event) } override fun dispatchKeyEventPreIme(event: KeyEvent?): Boolean { Log.d(TAG, "dispatchKeyEventPreIme") return super.dispatchKeyEventPreIme(event) } override fun dispatchKeyEvent(event: KeyEvent?): Boolean { Log.d(TAG, "dispatchKeyEvent") return if (event?.keyCode == KeyEvent.KEYCODE_BACK) { hide() finish() true } else super.dispatchKeyEvent(event) } }
暂定的解决方法
如果视频大于 2s 就在第一次播放后的第二秒隐藏 MediaController,然后点击视频切换手动显示/隐藏
[========]
参考链接
android - Make MediaController show without hide - Stack Overflow
CSDN 上也有一个跟 Stack Overflow 一样的,只不过是翻译过来的