package com.demo.app.ui.common; import android.app.Activity; import android.graphics.PixelFormat; import android.net.http.SslError; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.webkit.SslErrorHandler; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import android.widget.TextView; import com.demo.app.R; import com.demo.app.utils.browser.BaseJavaInterface; import com.demo.lib.common.util.common.StringUtils; import androidx.fragment.app.FragmentActivity; public class SimpleBrowserActivity extends FragmentActivity implements OnClickListener { private final static String TAG = "SimpleBrowserActivity"; private TextView tv_top_bar_left; private TextView tv_top_bar_left2; private TextView tv_top_bar_middle; private WebView webview; ProgressBar progressBar; private void initX5WebView() { webview = findViewById(R.id.webview); webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.i(TAG, url); if (url != null && (!url.startsWith("http"))) { return true; } return super.shouldOverrideUrlLoading(view, url); } @Override public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) { sslErrorHandler.proceed(); } }); webview.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { tv_top_bar_middle.setText(title); } @Override public void onProgressChanged(WebView webView, int i) { if (i == 100) { progressBar.setVisibility(View.GONE); } else { if (View.INVISIBLE == progressBar.getVisibility()) { progressBar.setVisibility(View.VISIBLE); } progressBar.setProgress(i); } super.onProgressChanged(webView, i); } }); WebSettings webSetting = webview.getSettings(); webSetting.setJavaScriptEnabled(true); webSetting.setTextZoom(100); webview.addJavascriptInterface(new BaseJavaInterface(this), "yestv"); } private boolean needSetResult = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(R.layout.activity_simple_browser); tv_top_bar_left = findViewById(R.id.tv_top_bar_left); tv_top_bar_left2 = findViewById(R.id.tv_top_bar_left2); tv_top_bar_left2.setVisibility(View.VISIBLE); tv_top_bar_middle = findViewById(R.id.tv_top_bar_middle); tv_top_bar_left2.setText("关闭"); try { if (getIntent().getBooleanExtra("close", true)) { String close = getIntent().getStringExtra("close"); if (!StringUtils.isEmpty(close)) { tv_top_bar_left2.setVisibility(Boolean.parseBoolean(close) ? View.VISIBLE : View.GONE); } else tv_top_bar_left2.setVisibility(View.VISIBLE); } else tv_top_bar_left2.setVisibility(View.GONE); } catch (Exception e) { } tv_top_bar_left.setOnClickListener(this); tv_top_bar_left2.setOnClickListener(this); progressBar = findViewById(R.id.myProgressBar); progressBar.setMax(100); progressBar.setProgressDrawable(this.getResources() .getDrawable(R.drawable.color_progressbar)); initX5WebView(); String url = getIntent().getStringExtra("url"); webview.loadUrl(url); needSetResult = getIntent().getBooleanExtra("result", false); } @Override public void onResume() { super.onResume(); if (webview != null) { webview.loadUrl("javascript:onResume()"); } } @Override public void onPause() { super.onPause(); } @Override protected void onDestroy() { if (webview != null) { webview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); webview.clearHistory(); ((ViewGroup) webview.getParent()).removeView(webview); webview.destroy(); webview = null; } super.onDestroy(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_top_bar_left: { if (!webview.canGoBack()) finishPage(); else { webview.goBack(); } } break; case R.id.tv_top_bar_left2: { finishPage(); } break; default: break; } } private void finishPage() { if (needSetResult) setResult(Activity.RESULT_OK); finish(); } // 设置回退 // 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); // goBack()表示返回WebView的上一页面 return true; } else { if (keyCode == KeyEvent.KEYCODE_BACK) { finishPage(); } } return super.onKeyDown(keyCode, event); } }