2020-10-22

it2025-08-23  4

package com.zjmt.oa.ui.activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.http.SslError; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.webkit.HttpAuthHandler; import android.webkit.SslErrorHandler; import android.webkit.WebChromeClient; import android.webkit.WebResourceError; import android.webkit.WebResourceRequest; import android.webkit.WebResourceResponse; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import android.widget.ProgressBar; import com.zjmt.oa.Constant; import com.zjmt.oa.R; import com.zjmt.oa.ui.BaseActivity; import com.zjmt.oa.util.AndroidBug5497Workaround; import com.zjmt.oa.util.TLog; import com.zjmt.oa.view.EmptyLayout; /** * Created by fanghua on 2016/7/4. */ public class BaseHtmlActivity extends BaseActivity implements View.OnClickListener { protected EmptyLayout mErrorView; protected WebView mWebView; private ProgressBar progressBar; ImageView topMenu; private String mUrl = null; private boolean mNeedResult = false; @Override protected int getLayoutId() { return R.layout.activity_detail_advertisement; } @Override public void initViews() { super.initViews(); AndroidBug5497Workaround.assistActivity(this); mErrorView = (EmptyLayout) findViewById(R.id.error_layout); // mErrorView.setErrorType(EmptyLayout.NETWORK_LOADING); mErrorView.setOnLayoutClickListener(listener); progressBar = (ProgressBar) findViewById(R.id.progressbar); topMenu = (ImageView) findViewById(R.id.top_menu); topMenu.setVisibility(View.VISIBLE); topMenu.setImageResource(R.mipmap.finish); topMenu.setOnClickListener(this); mWebView = (WebView) findViewById(R.id.advertise_webview); initWebSettings(); Intent intent = getIntent(); if (intent != null) { String title = intent.getStringExtra(Constant.TITLE); mUrl = intent.getStringExtra(Constant.URL); mNeedResult = intent.getBooleanExtra(Constant.RESULT,false); mTitleView.setVisibility(View.VISIBLE); mTitleView.setText(title); TLog.log( "html url = " + mUrl); doLoadSuccess(mUrl); } } public void doLoadSuccess(String url) { isReceiveError = false; mWebView.loadUrl(url); // mErrorView.setErrorType(EmptyLayout.HIDE_LAYOUT); } public void initWebSettings() { //设置WebChromeClient类 mWebView.setWebChromeClient(new WebChromeClient() { //获取加载进度 @Override public void onProgressChanged(WebView view, int newProgress) { TLog.log(newProgress+""); if (newProgress < 100) { progressBar.setProgress(newProgress); } else if (newProgress == 100) { progressBar.setVisibility(View.GONE); TLog.log("onProgressChanged"); } } }); //设置WebViewClient类 mWebView.setWebViewClient(new WebViewClient() { //设置加载前的函数 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // view.loadUrl(url); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { progressBar.setVisibility(View.VISIBLE); } //设置结束加载函数 @Override public void onPageFinished(WebView view, String url) { TLog.log("onPageFinished...url = "+url); if (!isReceiveError) { mErrorView.setErrorType(EmptyLayout.HIDE_LAYOUT); } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); TLog.log("error... 66"); doFail(); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { TLog.log("error...3"); super.onReceivedSslError(view, handler, error); } @Override public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { TLog.log("error...2"); super.onReceivedHttpAuthRequest(view, handler, host, realm); } @Override public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { TLog.log("error...1"); super.onReceivedHttpError(view, request, errorResponse); } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); TLog.log("error..."); progressBar.setVisibility(View.GONE); } }); WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); settings.setSupportZoom(true); settings.setBuiltInZoomControls(true); settings.setDisplayZoomControls(false); } public boolean isReceiveError = false; public void doFail() { isReceiveError = true; progressBar.setVisibility(View.GONE); mErrorView.setErrorType(EmptyLayout.NETWORK_ERROR); } public View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View view) { mErrorView.setErrorType(EmptyLayout.NETWORK_LOADING); doLoadSuccess(mUrl); } }; //点击返回上一页面而不是退出浏览器 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { mWebView.goBack(); return true; } if (keyCode == KeyEvent.KEYCODE_BACK && mNeedResult) { setResult(Constant.RESULT_CODE); } return super.onKeyDown(keyCode, event); } @Override public void doBackClick() { if ( mWebView.canGoBack()) { mWebView.goBack(); return; } if (mNeedResult) { setResult(Constant.RESULT_CODE); } super.doBackClick(); } @Override protected void onDestroy() { if (mWebView != null) { mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); mWebView.clearHistory(); ((ViewGroup) mWebView.getParent()).removeView(mWebView); mWebView.destroy(); mWebView = null; } super.onDestroy(); } @Override public void onClick(View view) { if (mNeedResult) { setResult(Constant.RESULT_CODE); } finish(); } }
最新回复(0)