首頁 > 軟體

Android開發使用WebView打造web app範例程式碼

2022-03-05 19:00:30

前言

博主最近想做一款app,因為內容已經有了,故想到了使用WebView來做 ,現將程式碼貼出如下,供有同樣需求的人蔘考,少走彎路

程式碼如下

public class MainActivity extends Activity{
    private WebView webview;
    private Handler handler;
    private ProgressDialog pd;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initWebView();
    }
    /**
     * 初始化WebView容器
     */
    public void initWebView() {
        //範例化WebView物件
        webview = new WebView(this);
        handler = new Handler() {
            public void handleMessage(Message msg) {//定義一個Handler,用於處理下載執行緒與UI間通訊
                if (!Thread.currentThread().isInterrupted()) {
                    switch (msg.what) {
                        case 0:
                            pd.show();//顯示進度對話方塊
                            break;
                        case 1:
                            pd.hide();//隱藏進度對話方塊,不可使用dismiss()、cancel(),否則再次呼叫show()時,顯示的對話方塊小圓圈不會動。
                            break;
                    }
                }
                super.handleMessage(msg);
            }
        };
        //設定WebViewClient
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;//如果不需要其他對點選連結事件的處理返回true,否則返回false
            }
            @Override
            public void onPageFinished(WebView view, String url) {
                if (!webview.getSettings().getLoadsImagesAutomatically()) {
                    webview.getSettings().setLoadsImagesAutomatically(true);
                }
            }
        });
        webview.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int progress) {
                pd.setMessage("資料載入中("+progress+"%),請稍候!");
                if (progress == 100) {
                    handler.sendEmptyMessage(1);//如果全部載入,隱藏進度對話方塊
                }
                MainActivity.this.setProgress(progress);
            }
        });
        pd = new ProgressDialog(MainActivity.this);
        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        handler.sendEmptyMessage(0);
        WebSettings webSettings = webview.getSettings();
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//優先使用快取的內容
        webSettings.setUseWideViewPort(true);//設定支援網頁viewport
        webSettings.setJavaScriptEnabled(true);//設定WebView屬性,能夠執行Javascript指令碼
//        webSettings.setSupportZoom(true);//支援縮放
//        webSettings.setBuiltInZoomControls(true);// 設定顯示縮放按鈕
//        setZoomControlGone(webview);
        webSettings.supportMultipleWindows();  //多視窗
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支援通過JS開啟新視窗
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//禁止左右捲動
        webview.requestFocusFromTouch();//支援獲取手勢焦點
        webview.setHorizontalScrollBarEnabled(false);//水平不顯示卷軸
        webview.setVerticalScrollbarOverlay(true);
        getWindow().requestFeature(Window.FEATURE_PROGRESS);//設定視窗風格為進度條
        //告訴WebView先不要自動載入圖片,等頁面finish後再發起圖片載入
        if (Build.VERSION.SDK_INT >= 19) {
            webview.getSettings().setLoadsImagesAutomatically(true);
        } else {
            webview.getSettings().setLoadsImagesAutomatically(false);
        }
        //載入需要顯示的網頁
        webview.loadUrl("http://www.kailing.pub/juanmei/");

        //設定Web檢視
        setContentView(webview);
    }
    //實現放大縮小控制元件隱藏
    public void setZoomControlGone(View view) {
        Class classType;
        Field field;
        try {
            classType = WebView.class;
            field = classType.getDeclaredField("mZoomButtonsController");
            field.setAccessible(true);
            ZoomButtonsController mZoomButtonsController = new ZoomButtonsController(view);
            mZoomButtonsController.getZoomControls().setVisibility(View.GONE);
            try {
                field.set(view, mZoomButtonsController);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }
    //設定回退
    //覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
            webview.goBack();
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_BACK) {
            ConfirmExit();//按了返回鍵,但已經不能返回,則執行退出確認
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    /**
     * 退出確認框
     */
    public void ConfirmExit() {
        AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
        ad.setTitle("退出");
        ad.setMessage("是否退出娟妹美甲坊?");
        ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按鈕
            @Override
            public void onClick(DialogInterface dialog, int i) {
                // TODO Auto-generated method stub
                MainActivity.this.finish();//關閉activity
                System.exit(0);
            }
        });
        ad.setNegativeButton("否", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int i) {
                //不退出不用執行任何操作
            }
        });
        ad.show();//顯示對話方塊
    }
    // 繼承GestureListener,重寫left和right方法,
    private class MyGestureListener extends GestureListener {
        public MyGestureListener(Context context) {
            super(context);
        }
        @Override
        public boolean left() {
            webview.goForward();
            return super.left();
        }
        @Override
        public boolean right() {
            webview.goBack();
            return super.right();
        }
    }
}

以上就是Android開發使用WebView打造web app的關鍵範例程式碼的詳細內容,更多關於Android開發WebView打造web app的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com