package com.secondworld.universalsdk; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.webkit.WebChromeClient; import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.RelativeLayout; import com.secondworld.univeralsdk.R; /** * Created by Administrator on 2018/8/1 0001. */ public class WebViewUtil { private static Activity m_Activity; private static String m_ReceivedUrl; private static WebView m_WebView; private static Button m_BtnClose; public static void OpenWebView(final Activity activity, final String url) { m_Activity = activity; m_ReceivedUrl = url; activity.runOnUiThread(new Runnable() { @Override public void run() { if (m_WebView != null && m_WebView.getVisibility() == View.VISIBLE) { processClose(); return; } DisplayMetrics _dm = new DisplayMetrics(); m_Activity.getWindowManager().getDefaultDisplay().getMetrics(_dm); final float _scale = _dm.widthPixels * 1f / 1344; final int _width = (int) (_scale * 982); final int _height = (int) (_scale * 560); m_BtnClose = (Button) m_Activity.findViewById(R.id.webView_btn_close); ViewGroup.MarginLayoutParams _margin = new ViewGroup.MarginLayoutParams( m_BtnClose.getLayoutParams()); RelativeLayout.LayoutParams _params = new RelativeLayout.LayoutParams(_margin); _params.width = 0; _params.height = 0; _params.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.webView); _params.addRule(RelativeLayout.ALIGN_RIGHT, R.id.webView); m_BtnClose.setLayoutParams(_params); m_BtnClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { processClose(); } }); m_WebView = (WebView) m_Activity.findViewById(R.id.webView); ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams( m_WebView.getLayoutParams()); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(margin); layoutParams.width = 0; layoutParams.height = 0; layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); m_WebView.setLayoutParams(layoutParams); m_WebView.getSettings().setJavaScriptEnabled(true); m_WebView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); view.loadUrl(m_ReceivedUrl); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("http") || url.startsWith("https")) { //http和https协议开头的执行正常的流程 view.loadUrl(url); return true; } else { //其他的URL则会开启一个Acitity然后去调用原生APP return super.shouldOverrideUrlLoading(view, url); } } @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (url.startsWith("http") || url.startsWith("https")) { //http和https协议开头的执行正常的流程 return super.shouldInterceptRequest(view, url); } else { //其他的URL则会开启一个Acitity然后去调用原生APP try { Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); m_Activity.startActivity(in); } catch (ActivityNotFoundException e) { e.printStackTrace(); } return null; } } }); m_WebView.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { if (title.contains("I'm QQ")) { m_WebView.loadUrl(m_ReceivedUrl); } super.onReceivedTitle(view, title); } @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { if (view.getUrl().contains("noticeweb")) { ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams( m_WebView.getLayoutParams()); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( margin); layoutParams.width = _width; layoutParams.height = _height; layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); m_WebView.setLayoutParams(layoutParams); ViewGroup.MarginLayoutParams _margin = new ViewGroup.MarginLayoutParams( m_BtnClose.getLayoutParams()); RelativeLayout.LayoutParams _params = new RelativeLayout.LayoutParams( _margin); _params.width = (int) (180 * _scale); _params.height = (int) (72 * _scale); _params.rightMargin = (int) (250 * _scale); _params.bottomMargin = (int) (10 * _scale); _params.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.webView); _params.addRule(RelativeLayout.ALIGN_RIGHT, R.id.webView); m_BtnClose.setLayoutParams(_params); } } } }); m_WebView.loadUrl(m_ReceivedUrl); m_WebView.setVisibility(View.VISIBLE); m_BtnClose.setVisibility(View.VISIBLE); } }); } private static void processClose() { m_WebView.clearFocus(); m_WebView.clearCache(true); m_WebView.clearHistory(); m_WebView.clearFormData(); m_WebView.setVisibility(View.INVISIBLE); m_BtnClose.setVisibility(View.INVISIBLE); } }