继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

UI组件のWebView

米脂
关注TA
已关注
手记 492
粉丝 88
获赞 590

WebView

1、概念

       WebView是Android种基于webkit内核浏览器渲染引擎的组件,它可以通过HTML显示方便地网页。 


2、权限

      WebView需要添加网络权限:<uses-permission android:name="android.permission.INTERNET" />   


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<Uri> uploadFile) {

uploadFile(uploadFile);

}


@SuppressWarnings("unused")

public void openFileChooser(ValueCallback<Uri> uploadFile,

String acceptType) {

uploadFile(uploadFile);

}


@SuppressWarnings("unused")

public void openFileChooser(ValueCallback<Uri> uploadFile,

String acceptType, String capture) {

uploadFile(uploadFile);

}

});  


        /** 打开文件选择器 */

         private void uploadFile(ValueCallback<Uri> 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;

}

}

}

}

原文链接:http://www.apkbus.com/blog-192385-59894.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP