android硬件加速
android:hardwareAccelerated="true"
WebView控件加速配置
//加速丝滑
getBinding().web.setLayerType(View.LAYER_TYPE_HARDWARE, null);
WebView基本配置
@SuppressLint("SetJavaScriptEnabled")
private void initWebSettings(WebView web) {
WebSettings settings = web.getSettings();
//支持js
settings.setJavaScriptEnabled(true);
// 解决图片不显示
settings.setBlockNetworkImage(false);
settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
//自适应屏幕
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
settings.setLoadWithOverviewMode(true);
//设置可以支持缩放
settings.setSupportZoom(false);
//扩大比例的缩放
settings.setUseWideViewPort(false);
//设置是否出现缩放工具
settings.setBuiltInZoomControls(false);
//解决白屏问题,原因不明
settings.setDomStorageEnabled(true);
//多窗口
settings.setSupportMultipleWindows(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
//加速丝滑
getBinding().web.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
WebView视频播放
webView.setWebChromeClient(new WebChromeClient() {
//==========全屏播放视频相关==========
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
webBinding.layoutFullVideo.setVisibility(View.VISIBLE);
webBinding.layoutFullVideo.addView(view);
hideState();
mCallback = callback;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 横屏
super.onShowCustomView(view, callback);
}
@Override
public void onHideCustomView() {
if (mCallback != null) {
mCallback.onCustomViewHidden();
}
webBinding.layoutFullVideo.removeAllViews();
webBinding.layoutFullVideo.setVisibility(View.GONE);
if (!full) {
showState();
}
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);//竖屏
super.onHideCustomView();
}
//==========全屏播放视频相关==========
});
private void showState() {//显示状态栏
getWindow().clearFlags(WindowManager.LayoutParams.MATCH_PARENT);
}
private void hideState() {//隐藏状态栏
getWindow().addFlags(WindowManager.LayoutParams.MATCH_PARENT);
}
//==========全屏播放视频相关==========
private static String getTagByUrl(String url) {
if (url.contains("qq")) {
return "tvp_fullscreen_button"; // http://m.v.qq.com
} else if (url.contains("youku")) {
return "x-zoomin"; // http://www.youku.com
} else if (url.contains("bilibili")) {
return "icon-widescreen"; // http://www.bilibili.com/mobile/index.html
} else if (url.contains("acfun")) {
return "controller-btn-fullscreen"; //http://m. 无效
} else if (url.contains("le")) {
return "hv_ico_screen"; // http://m.le.com 无效
}
return "";
}
// "javascript:document.getElementsByClassName('" + referParser(url) + "')[frontPage].addEventListener('click',function(){local_obj.playing();return false;});"
private String getJs(String url) {
String tag = getTagByUrl(url);
if (TextUtils.isEmpty(tag)) {
return "javascript:";
} else {
return "javascript:document.getElementsByClassName('" + tag + "')[frontPage].addEventListener('click',function(){onClick.fullVedio();return false;});";
}
}
//==========全屏播放视频相关==========
WebView多窗口跳转数据加载 多窗口原理: 使用List集合储存FrameLayout,FrameLayout移除和添加就好了 这个功能代码太乱了,就不做笔记了
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg) {
newWindow();
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(getBinding().web.getWebView());
resultMsg.sendToTarget();
return true;
}
});
Webview下载
//==========添加下载监听==========
getBinding().web.getWebView().setDownloadListener((url, userAgent, contentDisposition, mimetype, contentLength) -> {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
});
WebView按返回键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getBinding().web.getWebView().canGoBack()) {//若可以后退,则后退
goBack();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
|