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保持,避免重复登录
好吧,先从熟悉的开始准备:
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保持,避免重复登录
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories