使用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;
//    }

}

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