网页浏览控件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中响应
3、添加回退功能:点击系统“Back”键,如果希望浏览的网页回退,需要在当前
Activity 中处理掉该Back事件;否则会调用 finish()而结束自身退出浏览器。
4、添加权限:需要在AndroidManifest.xml文件中添加访问网络权限,否则出现Web
page not available错误。
简单事例:webview_act.html
WebView_Act.java
ProgressDialog的使用
使用时需要注意以下几点;
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);//设置点击进度对话框外的区域对话框不消失
相关文章推荐
- Android:控件WebView显示网页
- Android:控件WebView显示网页
- Android中【下拉刷新/上拉加载】WebView网页控件,Snackbar+CoordinatorLayoutt提示框(指定位置显示的提示框)
- Android的WebView控件载入网页显示速度慢的究极解决方案
- Android:控件WebView显示网页
- Android:控件WebView显示网页 -摘自网络
- Android:控件WebView显示网页
- Android--当webview加载网页的时候在标题栏上显示加载进度
- Android:控件WebView显示网页
- Android学习笔记50:使用WebView控件浏览网页
- 使用WebView控件浏览网页
- Android的WebView控件载入网页显示速度慢的究极解决方案
- Android:控件WebView显示网页
- android webview 加载网页显示对话框
- Android:控件WebView显示网页
- [Android分享] ANDROID的WEBVIEW控件载入网页显示速度慢的究极解决方案
- (转)Android:控件WebView显示网页
- 控件WebView显示网页
- Android:控件WebView显示网页
- Android的WebView控件载入网页显示速度慢的究极解决方案