作为一个刚刚起步做混合的小白,对开源的混合框架全不知晓,对于各种html、js更是一片迷茫,我想说接下来的路注定坎坷。。。
好吧,先从熟悉的开始准备:
1、android使用webview实现混合开发,关于第一步准备一个webview的布局
<WebViewandroid: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;@Overrideprotected 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 {@JavascriptInterfacepublic String getMessage(String name, String pwd) {return name + ":" + pwd;}}@Overridepublic 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 {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {wv_test.loadUrl(url);return true;}@Overridepublic void onPageFinished(WebView view, String url) {view.getSettings().setJavaScriptEnabled(true);super.onPageFinished(view, url);}}}
补充webviewClient中还可以覆写的方法及个方法代表的意思::
1,接收到Http请求的事件
onReceivedHttpAuthReques
2,打开链接前的事件
public boolean shouldOverrideUrlLoading
这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
3
public void onPageFinished(WebView view, String url){ }
同样道理,我们知道一个页面载入完成,于是我们可以关闭loading条,切换程序动作。
4
public void onPageStarted(WebView view, String url, Bitmap favicon) { }
这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。
需要整理的内容就是这些,接下来解决session保持,避免重复登录