Android(安卓)中访问网页 webView
解决中文乱码问题:
1.使用getBytes(“编码方式”);;来对汉字进行重编码,得到他的字节数组。
2. 再使用new String(Bytes[],”解码方式”);对字节数组进行相应的解码。
webKit应用
webKit分三个模块:javascriptCore,webCore和webKit.
WebView浏览网页:
几个重要的地方:
WebViewClient是专门辅助WebView处理各种通知,请求等事件的类。
webChromeClient是辅助WebView处理javascript的对话框,网站图标,网站title,加载进度。
packagecom.king.android.net;importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.app.AlertDialog.Builder;
importandroid.content.Context;
importandroid.content.DialogInterface;
importandroid.graphics.Bitmap;
importandroid.os.Bundle;
importandroid.view.KeyEvent;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.Window;
importandroid.view.View.OnClickListener;
importandroid.webkit.JsPromptResult;
importandroid.webkit.JsResult;
importandroid.webkit.URLUtil;
importandroid.webkit.WebChromeClient;
importandroid.webkit.WebSettings;
importandroid.webkit.WebView;
importandroid.webkit.WebViewClient;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.TextView;
importcom.king.android.R;
/**
*描述:浏览网页
*作者:Andy.Liu
*时间:2012-7-26上午07:28:17
* */
public classWebViewActivity extendsActivity{
ContextmContext;
ButtonbtnConn;
EditTextetUrl;
WebViewwvShow;
@Override
protected voidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
mContext=WebViewActivity. this;
setContentView(R.layout.webview_layout);
btnConn=(Button)findViewById(R.id.btn_conn);
etUrl=(EditText)findViewById(R.id.ed_show);
wvShow=(WebView)findViewById(R.id.wv_view);
btnConn.setOnClickListener( newOnClickListener(){
@Override
public voidonClick(Viewv){
try{
Stringurl=etUrl.getText().toString();
if(URLUtil.isNetworkUrl(url)){
wvShow.loadUrl(url);
} else{
etUrl.setText("输入网址错误,请重新输入");
}} catch(Exceptione){
}
}});
下面是主要知识点:
//设置javascript脚本
WebSettingswebSettings=wvShow.getSettings();
webSettings.setJavaScriptEnabled(true);
//设置可以访问文件
webSettings.setAllowFileAccess(true);
//设置支持缩放
webSettings.setBuiltInZoomControls(true);
/**
*设置WebViewClient
*WebViewClient是专门辅助WebView处理各种通知,请求等事件的类。
**/
wvShow.setWebViewClient(webViewClient);
/**
*webChromeClient是辅助WebView处理javascript的对话框,网站图标,网站title,加载进度。
**/
wvShow.setWebChromeClient(webChromeClient);
}
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if(KeyEvent.KEYCODE_BACK==keyCode){
//返回前一个页面
wvShow.goBack();
returntrue;
}
returnsuper.onKeyDown(keyCode,event);
}
privateWebViewClientwebViewClient=newWebViewClient(){
publicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){
view.loadUrl(url);
returntrue;
}
publicvoidonPageFinished(WebViewview,Stringurl){
super.onPageFinished(view,url);
}
publicvoidonPageStarted(WebViewview,Stringurl,Bitmapfavicon){
super.onPageStarted(view,url,favicon);
}
};
privateWebChromeClientwebChromeClient=newWebChromeClient(){
//处理js中的alert
publicbooleanonJsAlert(WebViewview,Stringurl,Stringmessage,finalJsResultresult){
Builderbuilder=newBuilder(mContext);
builder.setTitle("提示对话框");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok,newAlertDialog.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//点击确定按键之后,继续执行网页中的操作
result.confirm();
}});
builder.setCancelable(false);
builder.create();
builder.show();
returntrue;
};
publicbooleanonJsConfirm(WebViewview,Stringurl,Stringmessage,finalandroid.webkit.JsResultresult){
Builderbuilder=newBuilder(mContext);
builder.setTitle("带选择的对话框");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok,newAlertDialog.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//点击确定按键之后,继续执行网页中的操作
result.confirm();
}});
builder.setNegativeButton(android.R.string.cancel,newAlertDialog.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//点击取消
result.cancel();
}});
builder.setCancelable(false);
builder.create();
builder.show();
returntrue;
};
@Override
//处理javascript中的prompt
//message为网页中对话框的提示内容
//defaultValue在没有输入时,默认显示的内容
publicbooleanonJsPrompt(WebViewview,Stringurl,Stringmessage,StringdefaultValue,finalJsPromptResultresult){
//自定义一个带输入的对话框由TextView和EditText构成
finalLayoutInflaterfactory=LayoutInflater.from(mContext);
finalViewdialogview=factory.inflate(R.layout.prom_dialog,null);
((TextView)dialogview.findViewById(R.id.TextView_PROM)).setText(message);
((EditText)dialogview.findViewById(R.id.EditText_PROM)).setText(defaultValue);
Builderbuilder=newBuilder(mContext);
builder.setTitle("带输入的对话框");
builder.setView(dialogview);
builder.setPositiveButton(android.R.string.ok,
newAlertDialog.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intwhich){
//点击确定之后,取得输入的值,传给网页处理
Stringvalue=((EditText)dialogview.findViewById(R.id.EditText_PROM)).getText().toString();
result.confirm(value);
}
});
builder.setNegativeButton(android.R.string.cancel,
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intwhich){
result.cancel();
}
});
builder.setOnCancelListener(newDialogInterface.OnCancelListener(){
publicvoidonCancel(DialogInterfacedialog){
result.cancel();
}
});
builder.show();
returntrue;
};
@Override
//设置网页加载的进度条
publicvoidonProgressChanged(WebViewview,intnewProgress)
{
WebViewActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS,newProgress*100);
super.onProgressChanged(view,newProgress);
}
@Override
//设置应用程序的标题title
publicvoidonReceivedTitle(WebViewview,Stringtitle)
{
WebViewActivity.this.setTitle(title);
super.onReceivedTitle(view,title);
}
};
}
需要注意webView的几个地方
更多相关文章
- Service显示启动和隐式启动
- 说说 Android(安卓)中的通知(Notification)
- android图形图像函数汇集
- Android(安卓)自定义dialog(封装好的)
- 【读书笔记-《Android游戏编程之从零开始》】4.Android(安卓)游
- Android(安卓)的第三方报表组件,AChartEngine 案列demo
- 颜色选择器【ColorPickerPreference】自定义Preference 对话框
- Android游戏引擎《Rokon》:主要类和方法的介绍文档
- cocos2d-x在android真机上设置帧率无效的问题