使用Android Webview控件實現網頁封裝

    因項目需要,需要手機App,因爲本身網站頁面佈局是採用bootstrap框架,所以可以採用Android Webview控件來將網頁封裝。

    在此提醒一下,使用Android Webview控件的前提是網頁必須本身能適應手機的佈局。

    爲了將App做的美觀一些,我覺得需要4動作,分別是:

1.load網站頁面;

2.發生404錯誤時跳轉到默認頁面;

3.與js實現交互;

4.添加切入頁面;

import android.content.pm.ActivityInfo;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.os.Build;

import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;

import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;

import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private WebView myWebView;
    private ImageView picture;
    private Thread mThread;
    private RelativeLayout mRelativeLayout;
    private final static int msg_hasrecieved = 0;

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main); //設置全屏

        myWebView = (WebView) findViewById(R.id.id_webview);

        myWebView.loadUrl("http://123.206.50.181:8080/MagicEcg/doctor/login");

        myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//設置js可以直接打開窗口,如window.open(),默認爲false
        myWebView.getSettings().setJavaScriptEnabled(true);//是否允許執行js,默認爲false。設置true時,會提醒可能造成XSS漏洞
        myWebView.getSettings().setSupportZoom(false);//是否可以縮放,默認true
        myWebView.getSettings().setBuiltInZoomControls(true);//是否顯示縮放按鈕,默認false
        myWebView.getSettings().setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解決網頁自適應問題
        myWebView.getSettings().setAppCacheEnabled(false);//是否使用緩存
        myWebView.getSettings().setDomStorageEnabled(true);//DOM Storage
        myWebView.setWebViewClient(new WebViewClient());

        myWebView.getSettings().setAllowFileAccess(true);  //設置在WebView內部是否允許訪問文件,默認允許訪問。
        myWebView.getSettings().setAllowFileAccessFromFileURLs(true);  //設置WebView運行中的一個文件方案被允許訪問其他文件方案中的內容,默認值true
        myWebView.getSettings().setAllowUniversalAccessFromFileURLs(true); //設置WebView運行中的腳本可以是否訪問任何原始起點內容,默認true
//        myWebView.getSettings().setUseWideViewPort(true); //設置WebView是否使用viewport,當該屬性被設置爲false時,加載頁面的寬度總是適應WebView控件寬度;當被設置爲true,當前頁面包含viewport屬性標籤,在標籤中指定寬度值生效,如果頁面不包含viewport標籤,無法提供一個寬度值,這個時候該方法將被使用。
        myWebView.getSettings().setLoadWithOverviewMode(true);  //設置WebView是否使用預覽模式加載界面。
//        添加javascriptInterface
//        第一個參數:這裏需要一個與js映射的java對象
//        第二個參數:該java對象被映射爲js對象後在js裏面的對象名,在js中要調用該對象的方法就是通過這個來調用

        myWebView.addJavascriptInterface(new JSHook(), "hello");

//步驟3. 複寫shouldOverrideUrlLoading()方法,使得打開網頁時不調用系統瀏覽器, 而是在本WebView中顯示
        myWebView.setWebChromeClient(new WebChromeClient());
////404頁面跳轉,默認加載本地頁面
        myWebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                view.loadUrl("file:///android_asset/DortorErroe.htm");
            }
            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                view.loadUrl("file:///android_asset/DortorErroe.htm");
            }
        });
    }
//下面程序是實現與js交互,使頁面加載時,js能實現下面的方法
//ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 是橫屏    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT是豎屏
        public class JSHook{
            @JavascriptInterface
            public void javaMethod1(){
                Log.e(TAG, "javaMethod: in" );
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
            @JavascriptInterface
            public void javaMethod2(){
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }
            public String getInfo(){
                return "獲取手機內的信息!!";
            }
        }
//    @Override
//    //設置回退
//    //覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法
//    public boolean onKeyDown(int keyCode, KeyEvent event) {
//        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
//            webView.goBack(); //goBack()表示返回WebView的上一頁面
//            this.finish();
//            return true;
//        }
//        return false;
//    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章