在上一篇解决了播放视频的问题后,还存在一些小坑。
问题描述
在执行了沉浸式代码的界面中使用X5内核,如果网页中有视频,第一次点开视频,调用X5自带的全屏播放器播放,会自动横屏+全屏播放,没问题,这时如果返回后再次播放,则会变成竖屏+全屏播放,这时我发现界面底部存在横竖屏切换按钮,但被Android自带的底部导航栏挡住了并不能按到,本篇就会讲述对于此问题的临时解决方案。
在尝试寻找X5内核关于进入视频播放界面的监听器无果后,仔细观察可以发现,在X5进入视频播放界面时界面顶部状态栏被隐藏,但底部导航栏并没有。
横屏播放时还好,但不知道为什么X5内核在第二次进入视频播放界面时会变成默认竖屏的,就导致了此问题的发生。
解决
直接没法解决,我们只有绕点弯路了。
要解决此问题,首先重写界面flag的监听事件 onWindowAttributesChanged:
@Override
public void onWindowAttributesChanged(WindowManager.LayoutParams params) {
super.onWindowAttributesChanged(params);
Log.i(">>>",getWindow().getAttributes().flags+"");
}
打印日志发现,在X5进入视频播放界面时 flags 的值发生了变化,变为了-2122250880,则可以这么判断:
@Override
public void onWindowAttributesChanged(WindowManager.LayoutParams params) {
super.onWindowAttributesChanged(params);
if (getWindow().getAttributes().flags ==-2122250880){
if (!isFullScreen){
setFullScreen(true);
}
}else{
setFullScreen(false);
}
}
再加上完全关闭底部导航栏的代码:
private boolean isFullScreen;
private void setFullScreen(boolean enable) {
if (enable) {
if (!isFullScreen) {
isFullScreen = true;
int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
uiFlags |= 0x00001000;
getWindow().getDecorView().setSystemUiVisibility(uiFlags);
}
} else {
if (isFullScreen) {
isFullScreen = false;
int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
uiFlags |= 0x00001000;
getWindow().getDecorView().setSystemUiVisibility(uiFlags);
setTranslucentStatus(true);
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);
}
}
}
运行尝试,搞定!
网友评论