我知道如何控制后退按钮。我在VideoView
中嵌入了FrameLayout
。我的问题是当视频弹出时,视频控件会出现几秒钟。在可见时按下后退按钮会隐藏视频控件。有没有办法忽略该功能并执行下一步后退操作,就像视频控件不可见一样?
我问的原因是我真的想要回去,我必须按两次后退按钮;一次隐藏控件,第二次实际返回
答案 0 :(得分:28)
根据源代码,这应该有效:
MediaController
(为了这个答案,请将其称为RonnieMediaController
)dispatchKeyEvent()
RonnieMediaController
KeyEvent.KEYCODE_BACK
,如果遇到这种情况,请将您的活动告诉finish()
RonnieMediaController
MediaController
代替VideoView
醇>
就个人而言,我只是不管它,因为这项更改使您的用户无法按需消失RonnieMediaController
。
答案 1 :(得分:17)
您可以简单地写一下:
mVideoView.setMediaController(new MediaController(this){
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK)
((Activity) getContext()).finish();
return super.dispatchKeyEvent(event);
}
});
无需创建新课程。
答案 2 :(得分:6)
以前的解决方案不再适用于Android Pie +,您必须改为:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
mediaController.addOnUnhandledKeyEventListener((v, event) -> {
//Handle BACK button
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP)
{
mediaController.hide(); //Hide mediaController,according to your needs, you can also called here onBackPressed() or finish()
}
return true;
});
}
答案 3 :(得分:5)
您还可以让Activity处理事件:
mVideoView.setMediaController(new MediaController(this){
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK ) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP) {
((Activity) getContext()).onBackPressed();
return true;
}
}
return super.dispatchKeyEvent(event);
}
});
然后在您的活动中处理它:
@Override
public void onBackPressed() {
// clean up or send result here
finish();
}