Android中使用WebView加载H5页面的时候,如果H5页面里有视频播放器,那么在进行视频全屏切换的时候可能直接在H5页面上操作不管用,因此Android中就需要对WebView进行一些设置
FrameLayout mLayout; // 用来显示视频的布局
private View mCustomView; //用于全屏渲染视频的View
private WebChromeClient.CustomViewCallback mCustomViewCallback;
@SuppressLint("JavascriptInterface")
private void showWeb() {
// 自适应屏幕
mWeb.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
mWeb.getSettings().setLoadWithOverviewMode(true);
// 支持javascript
mWeb.getSettings().setJavaScriptEnabled(true);
// 设置可以支持缩放
mWeb.getSettings().setSupportZoom(true);
// 设置出现缩放工具
mWeb.getSettings().setBuiltInZoomControls(true);
//不显示webview缩放按钮
mWeb.getSettings().setDisplayZoomControls(false);
// 扩大比例的缩放
mWeb.getSettings().setUseWideViewPort(true);
//这个方法用于让H5调用android方法
mWeb.addJavascriptInterface(this,"android");
requestUrl = Url.productIntroductionUrl_H5 + "productId="+productId+"&pageType="+pageType;
mWeb.loadUrl(requestUrl);
mWeb.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
mWeb.loadUrl(request.getUrl().toString());
return super.shouldOverrideUrlLoading(view, request);
}
});
//设置播放视频显示全屏切换按钮使用的
mWeb.setWebChromeClient(new WebChromeClient(){
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
//如果view 已经存在,则隐藏
if (mCustomView != null) {
callback.onCustomViewHidden();
return;
}
mCustomView = view;
mCustomView.setVisibility(View.VISIBLE);
mCustomViewCallback = callback;
mLayout.addView(mCustomView);
mLayout.setVisibility(View.VISIBLE);
mLayout.bringToFront();
//设置横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
@Override
public void onHideCustomView() {
super.onHideCustomView();
if (mCustomView == null) {
return;
}
mCustomView.setVisibility(View.GONE);
mLayout.removeView(mCustomView);
mCustomView = null;
mLayout.setVisibility(View.GONE);
try {
mCustomViewCallback.onCustomViewHidden();
} catch (Exception e) {
}
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏
}
});
}
/**
* 横竖屏切换监听
* @param newConfig
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
switch (newConfig.orientation) {
case Configuration.ORIENTATION_LANDSCAPE:
// getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
break;
case Configuration.ORIENTATION_PORTRAIT:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
// getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
break;
}
}