如何在android中使用html作布局文件
在android开发中,通常使用xml格式来描述布局文件。就目前而言,熟悉android布局及美化的人员少之又少,出现了严重的断层。大部分企业,其实还是程序员自己动手布局。这样既浪费时间和精力,也未必能达到理想的效果。但是,在企业级的android开发中,使用html页面进行布局,也有很多的优势(例如:简单,大部分开发人员及美工都熟悉,方便统一进行更新,管理)。据笔者了解,已经有不少的公司在使用这种方式进行布局开发。这也可能是一种趋势。
下面,我将给出一个实例代码,供大家学习使用html页面给android应用布局。
package com.dazhuo.ui;
import java.util.list;
import org.json.jsonarray;
import org.json.jsonobject;
import com.dazhuo.domain.person;
import com.dazhuo.service.personservice;
import android.app.activity;
import android.content.intent;
import android.net.uri;
import android.os.bundle;
import android.util.log;
import android.webkit.webview;
public class mainactivity extends activity {
private personservice service;
private webview webview;
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
service =new personservice();
webview = (webview) this.findviewbyid(r.id.webview);//android内置浏览器对象
webview.getsettings().setjavascriptenabled(true);//启用javascript支持
//添加一个js交互接口,方便html布局文件中的javascript代码能与后台java代码直接交互访问
webview.addjavascriptinterface(new personplugin() , "person");//new类名,交互访问时使用的别名
// <body onload="javascript:person.getpersonlist()">
webview.loadurl("file:///android_asset/index.html");//加载本地的html布局文件
//其实可以把这个html布局文件放在公网中,这样方便随时更新维护 例如 webview.loadurl("www.xxxx.com/index.html");
}
//定义一个内部类,从java后台(可能是从网络,文件或者sqllite数据库) 获取list集合数据,并转换成json字符串,调用前台js代码
private final class personplugin{
public void getpersonlist(){
list<person> list = service.getpersonlist();//获得list数据集合
//将list泛型集合的数据转换为json数据格式
try {
jsonarray arr =new jsonarray();
for(person person :list)
{
jsonobject json =new jsonobject();
json.put("id", person.getid());
json.put("name", person.getname());
json.put("mobile",person.getmobile());
arr.put(json);
}
string jsonstr =arr.tostring();//转换成json字符串
webview.loadurl("javascript:show('"+ jsonstr +"')");//执行html布局文件中的javascript函数代码--
log.i("mainactivity", jsonstr);
} catch (exception e) {
// todo: handle exception
}
}
//打电话的方法
public void call(string mobile){
intent intent = new intent(intent.action_call, uri.parse("tel:"+ mobile));
startactivity(intent);
}
}
}
package com.dazhuo.domain;
public class person {
private integer id;
public integer getid() {
return id;
}
public person(integer id, string name, string mobile) {
super();
this.id = id;
this.name = name;
this.mobile = mobile;
}
public void setid(integer id) {
this.id = id;
}
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
}
public string getmobile() {
return mobile;
}
public void setmobile(string mobile) {
this.mobile = mobile;
}
private string name;
private string mobile;
}
package com.dazhuo.service;
import java.util.arraylist;
import java.util.list;
import com.dazhuo.domain.person;
public class personservice {
public list<person> getpersonlist()
{
list<person> list =new arraylist<person>();
list.add(new person(32, "aa", "13675574545"));
list.add(new person(32, "bb", "13698874545"));
list.add(new person(32, "cc", "13644464545"));
list.add(new person(32, "dd", "13908978877"));
list.add(new person(32, "ee", "15908989898"));
return list;
}
}
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>insert title here</title>
<script type="text/javascript">
function show(jsondata){
var jsonobjs = eval(jsondata);
var table = document.getelementbyid("persontable");
for(var y=0; y<jsonobjs.length; y++){
var tr = table.insertrow(table.rows.length); //添加一行
//添加三列
var td1 = tr.insertcell(0);
var td2 = tr.insertcell(1);
td2.align = "center";
var td3 = tr.insertcell(2);
td3.align = "center";
//设置列内容和属性
td1.innerhtml = jsonobjs[y].id;
td2.innerhtml = jsonobjs[y].name;
td3.innerhtml = "<a href='javascript:person.call(\""+ jsonobjs[y].mobile+ "\")'>"+ jsonobjs[y].mobile+ "</a>";
}
}
</script>
</head>
<!-- js代码通过webview调用其插件中的java代码 -->
<body onload="javascript:person.getpersonlist()">
<table border="0" width="100%" id="persontable" cellspacing="0">
<tr>
<td width="20%">编号</td><td width="40%" align="center">姓名</td><td align="center">电话</td>
</tr>
</table>
<a href="javascript:window.location.reload()">刷新</a>
</body>
</html>