您的位置:首页 > 理论基础 > 计算机网络

Android UI界面学习之WebView(网络视图)

2012-10-05 22:53 411 查看
Android中使用WebView来显示网页内容。使用WebView需要下面几个步骤:

1、在Android.manifest中添加访问互联网的权限:

首先要在manifest.main文件中创建一个webview,然后再activity中定义这个webview然后进行一下相关操作。

1、添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web pagenot available错误。

2、在要Activity中生成一个WebView组件:WebView webView = newWebView(this);

3、设置WebView基本信息:

如果访问的页面中有Javascript,则webview必须设置支持Javascript。

webview.getSettings().setJavaScriptEnabled(true);

触摸焦点起作用

requestFocus();

取消滚动条

this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

4如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。给WebView添加一个事件监听对象(WebViewClient)并重写其中的一些方法 shouldOverrideUrlLoading:对网页中超链接按钮的响应。
当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url

onLoadResource

onPageStart

onPageFinish

onReceiveError

onReceivedHttpAuthRequest

5、如果访问的页面中有Javascript,则webview必须设置支持Javascript ,否则显示空白页面。

Java代码

webview.getSettings().setJavaScriptEnabled(true);

6、如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象:

Java代码

1. mWebView.setWebViewClient(new WebViewClient(){

2. public boolean shouldOverrideUrlLoading(WebView view, String url) {

3. view.loadUrl(url);

4. return true;

5. }

6. });

上述方法告诉系统由我这个WebViewClient处理这个Intent,我来加载URL。点击一个链接的Intent是向上冒泡的,shouldOverrideUrlLoading方法return
true表示我加载后这个Intent就消费了,不再向上冒泡了。

7、如果不做任何处理,在显示你的Brower UI时,点击系统“Back”键,整个Browser会作为一个整体“Back"到其他Activity中,而不是希望的在Browser的历史页面中 Back。如果希望实现在历史页面中Back,需要在当前Activity中处理并消费掉该Back事件:

Java代码

1. public boolean onKeyDown(int keyCode, KeyEvent event) {

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

3. mWebView.goBack();

4. return true;

5. }

6. return super.onKeyDown(keyCode, event);

7. }

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

Java代码

@Override

1、public void onBackPressed()
{

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

3、 return ;

4、}

这里还有几个知识点:

1)为了让WebView从apk文件中加载 assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"

2)addJavascriptInterface方法中要绑定的 Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用Handler的目的。

加上进度条:

webView.setWebChromeClient(new WebChromeClient()

{

public void onProgressChanged(WebView view, int progress)

{

activity.setTitle("Loading...");

activity.setProgress(progress * 100);

if(progress == 100)

activity.setTitle(R.string.app_name);

}

}

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