解決中文亂碼問題:
1.使用getBytes(“編碼方式”);;來對漢字進行重編碼,得到他的位元組數組。
2. 再使用new String(Bytes[],”解碼方式”);對位元組數組進行相應的解碼。
webKit應用
webKit分三個模組:javascriptCore,webCore和webKit.
WebView瀏覽網頁:
幾個重要的地方:
WebViewClient是專門輔助WebView處理各種通知,請求等事件的類。
webChromeClient是輔助WebView處理javascript的對話方塊,網站表徵圖,網站title,載入進度。
package com.king.android.net;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.URLUtil;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.king.android.R;
/**
* 描述:瀏覽網頁
* 作者:Andy.Liu
* 時間: 2012-7-26 上午07:28:17
**/
public class WebViewActivity extends Activity {
Context mContext;
Button btnConn;
EditText etUrl;
WebView wvShow;
@Override
protected void onCreate(Bundle savedInstanceState) {
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(new OnClickListener(){
@Override
public void onClick(View v) {
try{
String url = etUrl.getText().toString();
if(URLUtil.isNetworkUrl(url)){
wvShow.loadUrl(url);
}else{
etUrl.setText("輸入網址錯誤,請重新輸入");
}}catch(Exception e){
}
}});
下面是主要知識點:
//設定javascript指令碼
WebSettings webSettings = 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
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(KeyEvent.KEYCODE_BACK==keyCode){
//返回前一個頁面
wvShow.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
private WebViewClient webViewClient = new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view,String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view,String url){
super.onPageFinished(view, url);
}
public void onPageStarted(WebView view,String url,Bitmap favicon){
super.onPageStarted(view, url,favicon);
}
};
private WebChromeClient webChromeClient = new WebChromeClient(){
//處理js中的alert
public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {
Builder builder = new Builder(mContext);
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;
};
public boolean onJsConfirm(WebView view, String url, String message, final android.webkit.JsResult result) {
Builder builder = new Builder(mContext);
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.setNegativeButton(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
//處理javascript中的prompt
//message為網頁中對話方塊的提示內容
//defaultValue在沒有輸入時,預設顯示的內容
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) {
//自訂一個帶輸入的對話方塊由TextView和EditText構成
final LayoutInflater factory = LayoutInflater.from(mContext);
final View dialogview = 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);
Builder builder = new Builder(mContext);
builder.setTitle("帶輸入的對話方塊");
builder.setView(dialogview);
builder.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//點擊確定之後,取得輸入的值,傳給網頁處理
String value = ((EditText) dialogview.findViewById(R.id.EditText_PROM)).getText().toString();
result.confirm(value);
}
});
builder.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {
result.cancel();
}
});
builder.show();
return true;
};
@Override
//設定網頁載入的進度條
public void onProgressChanged(WebView view, int newProgress)
{
WebViewActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress * 100);
super.onProgressChanged(view, newProgress);
}
@Override
//設定應用程式的標題title
public void onReceivedTitle(WebView view, String title)
{
WebViewActivity.this.setTitle(title);
super.onReceivedTitle(view, title);
}
};
}
需要注意webView的幾個地方