Android(安卓)WebView 精简Demo
16lz
2021-01-26
需求
这里放一个Android WebView的简单Demo,不过这个Demo是我这边特别精简的,能基本上适用于我这边大部分的页面显示和功能问题,多余的代码和配置都被我删掉了;
注释掉的代码是不同的情景模式,不做注释了。
代码
package zql.h5;import android.content.Context;import android.content.Intent;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.view.Window;import android.webkit.JavascriptInterface;import android.webkit.ValueCallback;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener { public static final String INTENT_URL = "intent_url";//请求连接// public static final String INTENT_PARAMS_STRING = "intent_params_string";//请求参数字符串// public static final String INTENT_REQUEST_WAY = "intent_request_way";//请求方式(POST/GET) private WebView wvShow; private TextView tv_back_title; private TextView tv_title; private ImageView iv_back; private TextView tv_right; public ValueCallback uploadMessage; private ValueCallback mUploadMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 setContentView(R.layout.activity_main); tv_back_title = (TextView) findViewById(R.id.tv_back_title); tv_title = (TextView) findViewById(R.id.tv_title); iv_back = (ImageView) findViewById(R.id.iv_back); tv_right = (TextView) findViewById(R.id.tv_right); iv_back.setOnClickListener(this); tv_back_title.setOnClickListener(this); tv_right.setOnClickListener(this); initView(); initData(); } private void initData() {// //外部:GET & POST形式// String intentUrl = getIntent().getStringExtra(INTENT_URL);// String intentParams = getIntent().getStringExtra(INTENT_PARAMS_STRING);// String intentRequestWay = getIntent().getStringExtra(INTENT_REQUEST_WAY);// Log.e("WebView请求", "连接:" + intentUrl + "....." + "参数:" + intentParams);//// if (intentRequestWay.equals("GET")) {// wvShow.loadUrl(intentUrl + "?" + intentParams);//get请求// } else if (intentRequestWay.equals("POST")) {// wvShow.postUrl(intentUrl, intentParams.getBytes());//post请求// } else {// Toast.makeText(MainActivity.this, "请求方式参数错误", Toast.LENGTH_SHORT).show();// } //链接 wvShow.loadUrl("https://bht.mandao.com/front/#/v2/chb/payment/21ecf0bbe1ee4eb0a8027ff234e7e65c/ASSURE_PAY");//get请求// //Html源码// String htmlData = "\n" +// "\n" +// "\n" +// " \n" +// " \n" +// " \n" +// " \n" +// " 修改资料 \n" +// " \n" +// "\n" +// "\n" +// "\n" +// " \n" +// " \n" +// " \n" +// " \n" +// "\n" +// "\n" +// "\n" +// "";//// Log.e("网页", htmlData);//// wvShow.loadDataWithBaseURL(null, htmlData, "text/html", "utf-8", null); } private void initView() { wvShow = (WebView) findViewById(R.id.wv_body); wvShow.getSettings().setJavaScriptEnabled(true);//允许与js 交互 wvShow.getSettings().setDefaultTextEncodingName("utf-8");//支持中文 wvShow.addJavascriptInterface(new JsInterface(this), "androidYZH");//在js中调用本地java方法(androidYZH这个是js和安卓之间的约定,js:window.androidYZH.closeH5) wvShow.getSettings().setDomStorageEnabled(true);//允许缓存、开启DOM(双重重定向白屏问题) wvShow.setWebViewClient(new WebViewClient() { //覆盖shouldOverrideUrlLoading 方法 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url == null) return false; try { if (url.startsWith("http:") || url.startsWith("https:")) { view.loadUrl(url); return true; } else {//如果不是http和https就用系统浏览器打开 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } } catch (Exception e) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash) return false; } } }); wvShow.setWebChromeClient(new WebChromeClient() {//监听网页加载 @Override public void onProgressChanged(WebView view, int newProgress) {// if (newProgress == 100) {// // 网页加载完成// pbProgress.setVisibility(View.GONE);// } else {// // 加载中// pbProgress.setProgress(newProgress);// } super.onProgressChanged(view, newProgress); } }); } @Override public void onClick(View v) { int i = v.getId(); if (i == R.id.iv_back) { if (wvShow.canGoBack()) { wvShow.goBack(); } else { finish(); } } else if (i == R.id.tv_back_title) { finish(); } } /** * js调用原生方法 */ private class JsInterface { private Context mContext; public JsInterface(Context context) { this.mContext = context; } @JavascriptInterface public void closeH5(String name) {//关闭sdk Log.e("网页", "方法入参:" + name); finish(); } @JavascriptInterface public void downloadFile(String name) {//下载文件 Log.e("网页", "方法入参:" + name); //这里是把地址用默认浏览器打开,在浏览器中下载 Uri uri = Uri.parse(name); Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setData(uri); startActivity(intent); } } //重写Activity的onKeyDown事件,判断当用户按下“返回”按钮,webview返回上一页 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && wvShow.canGoBack()) { wvShow.goBack(); return true; } else { finish(); } return super.onKeyDown(keyCode, event); }}
更多相关文章
- android 4.4 以上沉浸式状态栏和沉浸式导航栏管理,一句代码轻松实
- Android中控制软键盘的方法总结
- [置顶] android Activity和service深入介绍
- ANDROID2.3改进
- Android检查网络是否可用及上网请求
- android-async-http如何使用
- EditText自动弹出软键盘的原因及解决方法
- 【 Android(安卓)10 四大组件 】系列 -- Service 的 “ 启动流程
- android的TextView的TextWatcher使用