问题
发现在android4.0以上机型上,直接使用Webview加载带视频的html,点击视屏控件的全屏,无法全屏的问题.
各种尝试后,终于解决了问题.
解决
- 首先在根布局上设置一个 FrameLayout 来放置全屏下的视频内容,遮盖所有的内容.
- 然后在代码中设置 WebChromeClient
webView.setWebChromeClient(new MyWebChromeClient());
class MyWebChromeClient extends WebChromeClient {
private View myView = null;
// 全屏
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
ViewGroup parent = (ViewGroup) webView.getParent();
parent.removeView(webView);
fl_full_video.addView(view);
fl_full_video.setVisibility(View.VISIBLE);
myView = view;
setFullScreen();
}
// 退出全屏
@Override
public void onHideCustomView() {
super.onHideCustomView();
if (myView != null) {
fl_full_video.removeAllViews();
fl_webview.addView(webView);
fl_full_video.setVisibility(View.GONE);
myView = null;
quitFullScreen();
}
}
}
/**
* 设置全屏
*/
private void setFullScreen() {
// 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
/**
* 退出全屏
*/
private void quitFullScreen() {
// 声明当前屏幕状态的参数并获取
final WindowManager.LayoutParams attrs = this.getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.getWindow().setAttributes(attrs);
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
- 字段
- fl_full_video是全屏后把视频内容放置的view
- fl_webview是webview的父view
- 主要通过重写 onShowCustomView 和onHideCustomView,首先通过onShowCustomView中的内容view加入到全屏时的view中,然后再把webview从view中移除.然后在退出全屏时,在onHideCustomView中把webview加回到父view中,并且移除和隐藏全屏的view.