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

网页浏览控件WebView和显示进度的对话框ProgressDialog

2014-01-17 16:55 465 查看
WebView:实现网页浏览功能。

使用时需要注意以下几点;

1、加载需要显示的网页

互联网用:webView.loadUrl("http://www.baidu.com");

本地文件用:webView.loadUrl(file:///android_asset/eoe.html);固定格式本地文件存放在:assets文件中

2、点击页面中链接继续在当前browser中响应

webView.setWebViewClient(new WebView_Client());
//点击页面中链接, 如果希望继续在当前 browser中响应, 而不是新开 Android的系统browser中响应该链接,必须覆盖 webview 的 WebViewClient对象。
private class WebView_Client extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
webView.loadUrl(url);
return true;
}
}

3、添加回退功能:点击系统“Back”键,如果希望浏览的网页回退,需要在当前
Activity 中处理掉该Back事件;否则会调用 finish()而结束自身退出浏览器。

public boolean onKeyDown(int keyCode, KeyEvent event) {
//webView.canGoBack()在WebView含有一个可退的浏览记录时返回true
//webView.goBack()表示返回上次访问页面
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}

4、添加权限:需要在AndroidManifest.xml文件中添加访问网络权限,否则出现Web
page not available错误。

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


5、开启JavaScript支持:如果访问的页面中有Javascript,或者需要通过js和页面交互,则webview必须设置支持Javascript

//设置WebView属性,能够执行Javascript脚本
webView.getSettings().setJavaScriptEnabled(true);


6、触摸焦点起作用:

requestFocus();

7、取消滚动条:

this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

简单事例:webview_act.html

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">

<webview android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent">

</webview></linearlayout>


WebView_Act.java

/**
<activity android:name="com.WebView.WebView_Act" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
</category></action></intent-filter>
</activity>

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

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;

public class WebView_Act extends Activity {

private WebView webView;
ProgressDialog pd;
Handler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.webview_act);

init();
handler = new Handler(){
//定义一个Handler,用于处理下载线程与UI间通讯
public void handleMessage(Message msg){
if(!Thread.currentThread().isInterrupted()){
switch (msg.what) {
case 0:
pd.show();//显示进度对话框
break;

case 1:
//隐藏进度对话框,可使用dismiss(),、cancel(),
pd.dismiss();
break;

default:
break;
}
}
super.handleMessage(msg);
}
};
loadUrl(webView, "http://www.baidu.com");
}

//初始化
private void init(){
//实例化WebView对象
webView = (WebView)findViewById(R.id.webView);
//设置WebView属性,能够执行Javascript脚本 webView.getSettings().setJavaScriptEnabled(true);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上
webView.setScrollBarStyle(0);

//点击页面中链接, 如果希望继续在当前 browser中响应, 而不是新开 Android的系统browser中响应该链接,必须覆盖 webview 的 WebViewClient对象。
//WebViewClient就是帮助WebView处理各种通知、请求事件
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(final WebView view,final String url) {
// TODO Auto-generated method stub
// return super.shouldOverrideUrlLoading(view, url);
//载入网页
loadUrl(view, url);
return true;
}
});

//WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
if(newProgress == 100){
handler.sendEmptyMessage(1);////如果全部载入,隐藏进度对话框
}
super.onProgressChanged(view, newProgress);
}
});

//ProgressDialog创建方法一:如果第二个参数title为null则和下面第二种创建方法效果一样 // pd = ProgressDialog.show(WebView_Act.this, null, "加载中,请稍后……"); //ProgressDialog创建方法二: pd = new ProgressDialog(WebView_Act.this); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); pd.setMessage("数据载入中,请稍候!"); pd.setCancelable(false);//设置进度条是否可以按退回键取消(最好两个都为false) pd.setCanceledOnTouchOutside(false);//设置点击进度对话框外的区域对话框不消失}

@Override
//点击系统“Back”键,如果希望浏览的网页回退,需要在当前 Activity 中处理掉该Back事件;否则会调用 finish()而结束自身退出浏览器。
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK){
if(webView.canGoBack()){
webView.goBack();
}else{
//按了返回键,但已经不能返回,则执行退出确认
AlertDialog.Builder adb = new AlertDialog.Builder(WebView_Act.this);
adb.setTitle("退出");
adb.setMessage("是否退出软件?");
adb.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
WebView_Act.this.finish();
}
});
adb.setNeutralButton("中立", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//do nothing
}
});
adb.setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//not exit
}
});
adb.show();
}
return true;
}
return super.onKeyDown(keyCode, event);
}

private void loadUrl(final WebView view, final String url){
// new Thread(){
// public void run(){
handler.sendEmptyMessage(0);
//加载需要显示的网页
view.loadUrl(url);
// }
// }.start();
}
}


ProgressDialog的使用

//ProgressDialog创建方法一:如果第二个参数title为null则和下面第二种创建方法效果一样
//		pd = ProgressDialog.show(WebView_Act.this, null, "加载中,请稍后……");
//ProgressDialog创建方法二:
pd = new ProgressDialog(WebView_Act.this);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage("数据载入中,请稍候!");

pd.setCancelable(false);//设置进度条是否可以按退回键取消(最好两个都为false)
pd.setCanceledOnTouchOutside(false);//设置点击进度对话框外的区域对话框不消失











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