WebView
1、概念         WebView是Android种基于webkit内核浏览器渲染引擎的组件,它可以通过HTML显示方便地网页。 
2、权限       WebView需要添加网络权限:    
3、属性      1)想和Js进行交互?那么加上             mWebView.getSettings().setJavaScriptEnabled(true);       2 )想让WebView适应屏幕大小?那么加上              mWebView.getSettings().setUseWideViewPort(true);             mWebView.getSettings().setLoadWithOverviewMode(true);        3 )WebView不支持缩放?那么加上             mWebView.getSettings().setBuiltInZoomControls(true);             mWebView.getSettings().setSupportZoom(true);        4 )WebView显示乱码?重新设置一下编码吧!             mWebView.getSettings().setDefaultTextEncodingName("UTF-8");       5 )WebView显示空白?开启或关闭硬件加速试一下吧,你会有惊喜的!            mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 加上关闭,默认开启       6 )WebView不显示网络图片?阻碍了吧,放开吧!             mWebView.getSettings().setBlockNetworkImage(false); // true是锁定哦       7 )WebView打不开窗口?那么打开 试一试!             mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
      常用的属性就是这些啦,如果需要一些偏僻的,那就爱莫能助咯!
4、WebViewClient        WebViewClient处理各种通知,请求事件。
      wv.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //  如果你想打开的页面在webview中,不要犹豫了,copy吧!                                 view.loadUrl(url); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // 只要页面开始加载,我都监视的到 super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { // 略坑,到了这里还真不一定加载结束呢! super.onPageFinished(view, url); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // TODO Auto-generated method stub super.onReceivedError(view, errorCode, description, failingUrl); } });
5、WebChromeClient       处理各种对话框,加载进度,网站标题等。
      wv.setWebChromeClient(new WebChromeClient() {
@Override public void onCloseWindow(WebView window) { // TODO Auto-generated method stub super.onCloseWindow(window); }
@Override public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) { // 创建WebVIew时,走这里 return super.onCreateWindow(view, dialog, userGesture, resultMsg); }
@Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { // 定制自己的修改对话框 return super.onJsAlert(view, url, message, result); }
@Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { // 定制自己的确定对话框 return super.onJsConfirm(view, url, message, result); }
@Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { // 定制自己的提示对话框 return super.onJsPrompt(view, url, message, defaultValue, result); }
@Override public void onProgressChanged(WebView view, int newProgress) { // 这里可以知道页面加载了多少哦! super.onProgressChanged(view, newProgress); }
});          =================== WebView与Js交互 ====================   
一、Js调用Android        1) 添加调用接口 webview.addJavascriptInterface(new AndroidAPI(this), "Instance");        2)添加调用类 AndroidAPI,Js可以调用AndroidAPI中的任意方法
         public class AndroidAPI { private Context c;
public AndroidAPI(Context c) { this.c = c; }
public void Android_Method1() { Toast.makeText(c, "AndroidMethod1", Toast.LENGTH_SHORT).show(); }
public String Android_Method2() { return "Android_Method2"; } }
二、Android调用Js       1) 无参调用 webview.loadUrl("javascript:Js_Method()");       2)带参调用 webview.loadUrl("javascript:Js_Method(" + " 'Hello' "  + ")");
三、Js通过Android打开文件选择器,Android将文件发送到Js         1)  在WebChromeClient中添加openFileChooser实现(openFileChooser为隐藏方法,不可用重写的方式,3个代表不同版                 本的打开方式)
        mWebView.setWebChromeClient(new WebChromeClient() {
@SuppressWarnings("unused") public void openFileChooser(ValueCallback uploadFile) { uploadFile(uploadFile); }
@SuppressWarnings("unused") public void openFileChooser(ValueCallback uploadFile, String acceptType) { uploadFile(uploadFile); }
@SuppressWarnings("unused") public void openFileChooser(ValueCallback uploadFile, String acceptType, String capture) { uploadFile(uploadFile); } });  
        /** 打开文件选择器 */          private void uploadFile(ValueCallback uploadFile) { mUploadMessage = uploadFile; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "File Chooser"), FILE_CHOOSER_CODE);         }
    2)在OnActivityResult中接收选择文件,并返回给Js
         @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == FILE_CHOOSER_CODE) { if (mUploadMessage == null) return; if (data != null && resultCode == RESULT_OK) { Uri result = data.getData(); if (result != null) { mUploadMessage.onReceiveValue(result); mUploadMessage = null; } } } }

更多相关文章

  1. [Android] AsyncTask使用实例---加载网络图片
  2. [Network]Android(安卓)N Ethernet新IP获取机制—IpManager
  3. Android中Java和JavaScript交互解决方案,以及问题解决大全
  4. android调用shell命令及权限问题
  5. Android(安卓)媒体库数据更新
  6. Android(安卓)phone在拨号盘输入*#06#的处理流程
  7. android 远程接口
  8. 关于android中Email未设置账户的情况下发送mailto异常
  9. Android(安卓)Studio安装后Gradle同步失败问题的有效解决方案

随机推荐

  1. SQL Server 使用触发器(trigger)发送电子邮
  2. SQL 获取所有上级的实现方法
  3. SQL Server实时同步更新远程数据库遇到的
  4. MSSQL 2000 使用帮助(sql server简明教程
  5. SQL Server 2016 配置 SA 登录教程
  6. SQL Server 2016 无域群集配置 AlwaysON
  7. 解决Windows 10家庭版安装SQL Server 201
  8. SQLServer数据库中开启CDC导致事务日志空
  9. SQL Server日期加减函数DATEDIFF与DATEAD
  10. SQLServer性能优化--间接实现函数索引或