您的位置:首页 > 移动开发

Android_WebView用法

2013-06-04 00:53 555 查看
如果想WebView能够访问网络,必须在AndroidManifest.xml里面添加权限

[html] view
plaincopy

<uses-permission android:name="android.permission.INTERNET" />  

main.xml很简单,就是一个WebView

[html] view
plaincopy

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    android:orientation="vertical" >  

  

    <WebView  

        android:id="@+id/webView"  

        android:layout_width="fill_parent"  

        android:layout_height="fill_parent" />  

  

</LinearLayout>  

WebViewDemoActivity.java代码:

[java] view
plaincopy

package com.tianjf;  

  

import android.app.Activity;  

import android.os.Bundle;  

import android.webkit.WebView;  

  

public class WebViewDemoActivity extends Activity {  

  

    private WebView mWebView;  

  

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

  

        mWebView = (WebView) findViewById(R.id.webView);  

  

        // 得到WebSettings对象,设置支持JavaScript参数  

        // 如果访问的页面中有JavaScript,则WebView必须设置支持JavaScript ,否则显示空白页面  

        mWebView.getSettings().setJavaScriptEnabled(true);  

        // 加载URL  

        mWebView.loadUrl("http://www.baidu.com/");  

    }  

}  

运行一下就会看到URL被正确load出来了。

但是有个问题,当点击链接继续浏览,则会弹出系统默认的Browser,为了能够继续在WebView中浏览,要用到shouldOverrideUrlLoading方法:

[java] view
plaincopy

@Override  

public void onCreate(Bundle savedInstanceState) {  

  

    。。。。。。。。。。。。。。。。。。。。。。。。                  

  

    // 虽然Google主页在WebView中显示了,但是如果点击链接继续浏览,则会显示到系统默认的Browser中  

    // 为了继续在WebView中显示,需要重写shouldOverrideUrlLoading方法  

    mWebView.setWebViewClient(new MyWebViewClient());  

         

  

    。。。。。。。。。。。。。。。。。。。。。。。。          

       }  

  

private class MyWebViewClient extends WebViewClient {  

    @Override  

    public boolean shouldOverrideUrlLoading(WebView view, String url) {  

        view.loadUrl(url);  

        return true;  

    }  

}  

另外,如果想按回退键回到上一个页面,那么

[java] view
plaincopy

/** 

 * 按back键可以回到上个网页 

 */  

@Override  

public boolean onKeyDown(int keyCode, KeyEvent event) {  

    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {  

        mWebView.goBack();  

        return true;  

    }  

    return super.onKeyDown(keyCode, event);  

}  

对于Android 2.0开始又多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写onBackPressed 方法即可,代码如下

[java] view
plaincopy

@Override  

public void onBackPressed() {  

 // 这里处理逻辑代码,该方法仅适用于2.0或更高版本的sdk  

return ;  

}  

如果想加载工程中的HTML,那么可以用到下面的方法(前提是HTML放在assets目录中)

[java] view
plaincopy

mWebView.loadUrl("file:///android_asset/test.html");  

如果想直接load一段HTML文,可以用下面的方法

[java] view
plaincopy

mWebView.loadData("<html><body>abcdefg</body></html>", "text/html", "utf-8");  

下面是WebView其他的一下用法:

设置允许访问文件数据

[java] view
plaincopy

mWebView.getSettings().setAllowFileAccess(true);  

设置支持缩放

[java] view
plaincopy

mWebView.getSettings().setBuiltInZoomControls(true);  

设置是否保存密码

[java] view
plaincopy

mWebView.getSettings().setSavePassword(false);  

设置支持各种不同的设备

[java] view
plaincopy

mWebView.getSettings().setUserAgentString("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X;en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334bSafari/531.21.10");  

加载webview网页时所要执行的一些方法

[java] view
plaincopy

mWebView.setWebViewClient(new WebViewClient() {  

        // 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示  

        @Override  

        public boolean shouldOverrideUrlLoading(WebView view, String url) {  

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

            super.onReceivedError(view, errorCode, description, failingUrl);  

        }  

    });  

处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)

[java] view
plaincopy

mWebView.setWebChromeClient(new WebChromeClient() {  

        // 提示对话框  

        @Override  

        public boolean onJsAlert(WebView view, String url, String message,  

                final JsResult result) {  

            // 构建一个Builder来显示网页中的alert对话框  

            Builder builder = new Builder(WebViewDemoActivity.this);  

            builder.setTitle("提示对话框");  

            builder.setMessage(message);  

            builder.setPositiveButton(android.R.string.ok,  

                    new AlertDialog.OnClickListener() {  

                        @Override  

                        public void onClick(DialogInterface dialog,  

                                int which) {  

                            result.confirm();  

                        }  

                    });  

            builder.setCancelable(false);  

            builder.create();  

            builder.show();  

            return true;  

        }  

  

        // 带按钮的对话框  

        @Override  

        public boolean onJsConfirm(WebView view, String url,  

                String message, final JsResult result) {  

            Builder builder = new Builder(WebViewDemoActivity.this);  

            builder.setTitle("带选择的对话框");  

            builder.setMessage(message);  

            builder.setPositiveButton(android.R.string.ok,  

                    new AlertDialog.OnClickListener() {  

                        @Override  

                        public void onClick(DialogInterface dialog,  

                                int which) {  

                            result.confirm();  

                        }  

                    });  

            builder.setNeutralButton(android.R.string.cancel,  

                    new AlertDialog.OnClickListener() {  

                        @Override  

                        public void onClick(DialogInterface dialog,  

                                int which) {  

                            result.cancel();  

                        }  

                    });  

            builder.setCancelable(false);  

            builder.create();  

            builder.show();  

            return true;  

        }  

  

        // 带输入框的对话框  

        @Override  

        public boolean onJsPrompt(WebView view, String url, String message,  

                String defaultValue, final JsPromptResult result) {  

            LayoutInflater inflater = LayoutInflater  

                    .from(WebViewDemoActivity.this);  

            final View v = inflater.inflate(R.layout.myDialog, null);  

            // 设置 TextView对应网页中的提示信息  

            ((TextView) v.findViewById(R.id.textView)).setText(message);  

            // 设置EditText对应网页中的输入框  

            ((EditText) v.findViewById(R.id.editText))  

                    .setText(defaultValue);  

  

            Builder builder = new Builder(WebViewDemoActivity.this);  

            builder.setTitle("带输入的对话框");  

            builder.setView(v);  

            builder.setPositiveButton(android.R.string.ok,  

                    new AlertDialog.OnClickListener() {  

                        @Override  

                        public void onClick(DialogInterface dialog,  

                                int which) {  

                            String value = ((EditText) v  

                                    .findViewById(R.id.editText)).getText()  

                                    .toString();  

                            result.confirm(value);  

                        }  

                    });  

            builder.setNegativeButton(android.R.string.cancel,  

                    new AlertDialog.OnClickListener() {  

                        @Override  

                        public void onClick(DialogInterface dialog,  

                                int which) {  

                            result.cancel();  

                        }  

                    });  

            builder.setOnCancelListener(new DialogInterface.OnCancelListener() {  

                @Override  

                public void onCancel(DialogInterface dialog) {  

                    result.cancel();  

                }  

            });  

            builder.create();  

            builder.show();  

            return true;  

        }  

  

        // 设置网页加载的进度条  

        @Override  

        public void onProgressChanged(WebView view, int newProgress) {  

            WebViewDemoActivity.this.getWindow().setFeatureInt(  

                    Window.FEATURE_PROGRESS, newProgress * 100);  

            super.onProgressChanged(view, newProgress);  

        }  

          

        // 设置应用程序的标题  

        @Override  

        public void onReceivedTitle(WebView view, String title) {  

            WebViewDemoActivity.this.setTitle(title);  

            super.onReceivedTitle(view, title);  

        }  

    });  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: