WebView基本演绎法(2)
来源:互联网 发布:hermite矩阵的转置 编辑:程序博客网 时间:2024/06/08 00:19
Android里面有好多界面是直接内嵌h5页面,这时有好多地方需要注意:
- 提示框使用Android项目的提示框以保持一致性
- 页面加载时的加载提示
- 文件的上传
- 图片的拍照和选取
- 发送短信和拨打电话
- 返回按钮的点击监听
- 与js的相互使用
布局中添加WebView
<WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbarSize="0dip" android:scrollbarStyle="outsideOverlay" > </WebView>
基本设置
对没有特殊要求的WebView都要有下面的基本设置:
web.getSettings().setSupportZoom(true);//允许缩放 web.getSettings().setBuiltInZoomControls(true);// 显示放大缩小 controler web.getSettings().setJavaScriptEnabled(true);//语序WebView执行JS web.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);//隐藏滚动条 web.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用缓存,只用网络加载
加载url
web.loadUrl(/** url地址 **/);
使用Android项目自己的提示框
web.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { } @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { //在这里调用自定义的提示框,message为提示内容 result.cancel(); return true; } @Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { return true; } });
页面开始加载
web.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url == null || url.length() == 0) { } else { ※※※※※※※※※※※※※※※※ /** 处理url,上传文件,图片处理等,通过获取到用户点击的url来判断 **/ return true; } // 顺带提一点,WebView的设置WebviewClient时,在shouldoverrideurlloading中只对要拦截处理的url返回true,否则一定要返回false ,这样就能避免重定向问题。 return false; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); /** 在这里进行加载开始提示 **/ } @Override public void onPageFinished(WebView view, String url) { // TODO Auto-generated method stub super.onPageFinished(view, url); /** 在这里进行加载完成提示 **/ } }); }
处理用户点击操作
在h5中对一个按钮的点击就是打开一个url地址,是普遍的使用方法。Android中就可以根据截取到的url进行app的操作:
这里有大神提供的一个很好的公共实用方法:
/** * 封装链接上的键值对并保存到hashmap * * @param url * @return HashMap<key,value> */ public static HashMap<String, String> handleUrlParams(String url) { HashMap<String, String> hm = new HashMap<String, String>(); if (url.contains("?") && url.indexOf("?") != url.length() - 1) { String params = url.substring(url.indexOf("?") + 1); if (params.contains("&")) { String[] paramArr = params.split("&"); for (int i = 0; i < paramArr.length; i++) { String str = paramArr[i]; if ((str.split("=")).length > 1) { try { hm.put(str.split("=")[0], URLDecoder.decode(str.split("=")[1], "UTF-8")); } catch (UnsupportedEncodingException e) { DebugHelper.writeLog(e); } } } } else { if (params.contains("=")) { try { hm.put(params.split("=")[0], URLDecoder.decode(params.split("=")[1], "UTF-8")); } catch (UnsupportedEncodingException e) { DebugHelper.writeLog(e); } } } } return hm; }
然后在上面代码的※※※※※※※※※※※※※※※※中进行操作:
private void handleProtocolUrl(WebView view, String url) { HashMap<String, String> hm = handleUrlParams(url); Intent intent = null; if (url.startsWith(/** 返回的链接 **/)) {//返回按钮点击 this.finish(); } else if (url.startsWith(/** 打电话的链接 **/)) {// intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ hm.get("mobile"))); } else if (url.startsWith(/**照片处理的链接 **/)) { /** 图片选取或拍照 **/ } else if (url.startsWith( /** 发送短信的链接 **/)) { Uri uri = Uri.parse("smsto:" + hm.get("mobile")); intent = new Intent(Intent.ACTION_VIEW, uri); intent.putExtra("sms_body", hm.get("msg")); } else { view.loadUrl(url); } if (intent !=null) { startActivity(intent); } }
这些链接都是根据h5页面的具体链接写的。
对返回监听的处理
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) { // 如果可以回退 web.goBack(); return true; } return super.onKeyDown(keyCode, event); }
1 0
- WebView基本演绎法(2)
- WebView基本演绎法(1)
- 观察力训练(福尔摩斯演绎法)
- 什么是演绎法
- Java WebView 交互(基本)
- 基本控件使用(四)(WebView)
- WebView简介(基本显示篇)
- WebView简介(定制基本行为篇)
- WebView的使用(基本篇)
- android WebView(一)基本使用
- 构建高性能的ASP.NET应用(二)-性能优化演绎法
- webView控件基本使用
- webview基本调试技巧
- WebView基本使用
- webview的基本使用
- Android:WebView基本使用
- WebView基本使用
- WebView基本使用1
- mysql查询当前数据库中所有表
- spring4.1.6 学习之eclipse安装spring tool suite插件
- Run Loop详细说明
- 【UnityShader从零开始】
- 一点感悟:反馈的重要性
- WebView基本演绎法(2)
- iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链
- Windows上通过程序写入回车字符
- apache日志LogFormat参数说明
- Git@OSC 开源中国git与sourceTree联合使用教程
- Windows消息机制
- 关于createFromAsset--转载
- iBatis简单概述
- js中的this