WebView的一些属性

来源:互联网 发布:php 提示非法字符串 编辑:程序博客网 时间:2024/06/07 09:17
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;
}
}
}
}
0 0