Hybrid 混合开发--基础储备--1

作为一个刚刚起步做混合的小白,对开源的混合框架全不知晓,对于各种html、js更是一片迷茫,我想说接下来的路注定坎坷。。。

好吧,先从熟悉的开始准备:

1、android使用webview实现混合开发,关于第一步准备一个webview的布局

<WebView
        android:id="@+id/approve_wv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/relativeLayout"
        android:layout_alignParentBottom="true"></WebView>

你完全可以设置一个webview的布局占据整个终端屏幕,当然要根据不同的需求来布局,比如,我只是在webview显示的框框上边添加了一个标题@+id/relativelayout

2、创建一个activity添加该布局文件

3、权限问题(webview嘛),一看那就是需要连接互联网的娃嘛。。。

 <uses-permission android:name="android.permission.INTERNET" />
4、关于真正的编码

package com.testdemo.sun.test001;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

public class MainActivity extends AppCompatActivity  {
    private static final String TAG = MainActivity.class.getSimpleName();
    private WebView wv_test;
    private static final String URL = "http://10.1.41.36:8888/notice/mobilelist.jsp";

    private Button btn_back;
    private Button btn_forward;
    private Button btn_zoomin;
    private Button btn_zoomout;

    private Button btn_title_back;
    private Button btn_publish;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wv_test = (WebView) findViewById(R.id.test001_webView);

        initView();

        WebSettings wbSettings = wv_test.getSettings();
        wbSettings.setJavaScriptEnabled(true);//表示webview可以执行web端的js代码
        //如果访问的页面中有Javascript,则webview必须设置支持Javascript
       
        //如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点
        wv_test.requestFocusFromTouch();

        wv_test.setWebViewClient(new MyWebViewClient());//主要来监听页面内的连接,调用手机浏览器直接访问

        wv_test.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);

        //与JS界面的交互,demo替换原js的弹窗,可以在该方法中覆写
        wv_test.setWebChromeClient(new <span style="font-family: Arial, Helvetica, sans-serif;">WebChromeClient()</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>

        //服务器与app数据交互
        JsObjection js = new JsObjection();//获取服务器端提交的数据
        //JsObjection字符串即为JsObjection对象的引用,交互访问的别名(实现js调用原生方法)
        wv_test.addJavascriptInterface(js, "JsObjection");
        //wView.loadUrl("file:///android_asset/index.html");
        //       -----打开本包内asset目录下的index.html文件
        //wView.loadUrl("content://com.android.htmlfileprovider/sdcard/index.html");
        //       -----打开本地sd卡内的index.html文件
        //wView.loadUrl("http://wap.baidu.com");
        //        -----打开指定URL的html文件
        //wv_test.loadUrl("file:///android_asset/html/27-1.html");
        //syncCookie(this, URL, "2253D1DCA304AE7DB96ABE7664EABDDC");
        wv_test.loadUrl(URL);
    }


    public class JsObjection {
        @JavascriptInterface
        public String getMessage(String name, String pwd) {
            return name + ":" + pwd;
        }

    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && wv_test.canGoBack()) {
            wv_test.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }


    // 监听 所有点击的链接,如果拦截到我们需要的,就跳转到相对应的页面。
    public class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            wv_test.loadUrl(url);
            return true;
        }


        @Override
        public void onPageFinished(WebView view, String url) {
            view.getSettings().setJavaScriptEnabled(true);
            super.onPageFinished(view, url);
        }
    }


}

补充webviewClient中还可以覆写的方法及个方法代表的意思::

1,接收到Http请求的事件
onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) 

2,打开链接前的事件
public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } 

这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
 
3
,载入页面完成的事件
public void onPageFinished(WebView view, String url){ } 

同样道理,我们知道一个页面载入完成,于是我们可以关闭loading条,切换程序动作。
 
4
,载入页面开始的事件
public void onPageStarted(WebView view, String url, Bitmap favicon) { } 

这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。


需要整理的内容就是这些,接下来解决session保持,避免重复登录



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