Android 中訪問網頁 webView

來源:互聯網
上載者:User

解決中文亂碼問題:       

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的幾個地方 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.