需求

这里放一个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);    }}

 

更多相关文章

  1. android 4.4 以上沉浸式状态栏和沉浸式导航栏管理,一句代码轻松实
  2. Android中控制软键盘的方法总结
  3. [置顶] android Activity和service深入介绍
  4. ANDROID2.3改进
  5. Android检查网络是否可用及上网请求
  6. android-async-http如何使用
  7. EditText自动弹出软键盘的原因及解决方法
  8. 【 Android(安卓)10 四大组件 】系列 -- Service 的 “ 启动流程
  9. android的TextView的TextWatcher使用

随机推荐

  1. Android(安卓)WheelView(滑轮组件)使用
  2. Android性能优化——合理进行内存管理
  3. Android(安卓)DownloadManager下载状态查
  4. PendingIntent实现原理和代码
  5. 快速了解Android(安卓)onMeasure() onLay
  6. 什么是AIDL
  7. 如何实现Android(安卓)布局背景模糊化处
  8. Android打开系统设置界面
  9. android计数器――基础编
  10. Android静态注册广播receiver检测WIFI连