您的位置:首页 > 移动开发 > Android开发

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

2015-10-31 10:22 447 查看
作为一个刚刚起步做混合的小白,对开源的混合框架全不知晓,对于各种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保持,避免重复登录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android hybrid