使用html开发软件界面

因为android软件开发分工目前还没有细化,程序员往往需要负责软件界面的开发,
虽然软件的界面图片已经由美工设计好了,但如果使用layout技术把软件做成如图片所示的界面确实很困难,
而且也比较耗时。Android通过WebView实现了JS代码与Java代码互相通信的功能,
使得android软件的界面开发也可以采用HTML网页技术,这样,广大网页美工可以参
与进android软件的界面开发工作,从而让程序员从中解脱出来。

<WebView> 代码中使用浏览器Webkit,就要使用到WebView控件;使用<WebView> 显示网页内容;

采用布局layout完成软件界面很累人,很痛苦;

将网页文件及图片放到assets目录下


json数组[{id:20,name:"xxx",mobile:"1332"},{}]

json字符串转成json对象


java对象作为插件安装到webkit,js代码就能访问到数据了;


OO的方法将对象的数据转成json字符串;

配置单元测试:
<uses-library android:name="android.test.runner"/>

<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.itcast.html" android:label="My File Test" />


隐式意图Intent调用电话拨号器;

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + mobile));
startActivity(intent);

拨打电话权限:
<uses-permission android:name="android.permission.CALL_PHONE"/>

软件界面更新立刻被用户看到:将index.html放到服务器中;
webView.loadUrl("http://192.168.1.100:8080/web/index.html");

允许网络访问权限:
<uses-permission android:name="android.permission.INTERNET"/>

[html]
  1. index.html
  2. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
  6. <title>Inserttitlehere</title>
  7. <scripttype="text/javascript">
  8. functionshow(jsondata){
  9. varjsonobjs=eval(jsondata);//json字符串转换为json对象
  10. vartable=document.getElementById("personTable");
  11. for(vary=0;y<jsonobjs.length;y++){
  12. vartr=table.insertRow(table.rows.length);//添加一行
  13. //添加三列
  14. vartd1=tr.insertCell(0);
  15. vartd2=tr.insertCell(1);
  16. td2.align="center";
  17. vartd3=tr.insertCell(2);
  18. td3.align="center";
  19. //设置列内容和属性
  20. td1.innerHTML=jsonobjs[y].id;
  21. td2.innerHTML=jsonobjs[y].name;
  22. td3.innerHTML="<ahref='javascript:contact.call(\""+jsonobjs[y].mobile+"\")'>"+jsonobjs[y].mobile+"</a>";
  23. }
  24. }
  25. </script>
  26. </head>
  27. <!--js代码通过webView调用其插件中的java代码-->
  28. <bodyonload="javascript:contact.getContacts()">
  29. <tableborder="0"width="100%"id="personTable"cellspacing="0">
  30. <tr>
  31. <tdwidth="20%">编号</td><tdwidth="40%"align="center">姓名</td><tdalign="center">电话</td>
  32. </tr>
  33. </table>
  34. <ahref="javascript:window.location.reload()">刷新</a>
  35. </body>
  36. </html>
[html]
  1. Contact.java
  2. packagecn.itcast.domain;
  3. publicclassContact{
  4. privateIntegerid;
  5. privateStringname;
  6. privateStringmobile;
  7. publicContact(Integerid,Stringname,Stringmobile){
  8. this.id=id;
  9. this.name=name;
  10. this.mobile=mobile;
  11. }
  12. publicIntegergetId(){
  13. returnid;
  14. }
  15. publicvoidsetId(Integerid){
  16. this.id=id;
  17. }
  18. publicStringgetName(){
  19. returnname;
  20. }
  21. publicvoidsetName(Stringname){
  22. this.name=name;
  23. }
  24. publicStringgetMobile(){
  25. returnmobile;
  26. }
  27. publicvoidsetMobile(Stringmobile){
  28. this.mobile=mobile;
  29. }
  30. }

[html]
  1. ContactService.java
  2. packagecn.itcast.service;
  3. importjava.util.ArrayList;
  4. importjava.util.List;
  5. importcn.itcast.domain.Contact;
  6. publicclassContactService{
  7. publicList<Contact>getContacts(){
  8. List<Contact>contacts=newArrayList<Contact>();
  9. contacts.add(newContact(2,"shenlu","5201314"));
  10. contacts.add(newContact(12,"shenlu","5201314"));
  11. contacts.add(newContact(22,"shenlu","5201314"));
  12. returncontacts;
  13. }
  14. }

[html]
  1. MainActivity.java
  2. packagecn.itcast.html;
  3. importjava.util.List;
  4. importorg.json.JSONArray;
  5. importorg.json.JSONException;
  6. importorg.json.JSONObject;
  7. importcn.itcast.domain.Contact;
  8. importcn.itcast.service.ContactService;
  9. importandroid.app.Activity;
  10. importandroid.content.Intent;
  11. importandroid.net.Uri;
  12. importandroid.os.Bundle;
  13. importandroid.webkit.WebView;
  14. publicclassMainActivityextendsActivity{
  15. privateContactServiceservice;
  16. privateWebViewwebView;
  17. @Override
  18. publicvoidonCreate(BundlesavedInstanceState){
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.main);
  21. service=newContactService();
  22. webView=(WebView)this.findViewById(R.id.webView);
  23. webView.getSettings().setJavaScriptEnabled(true);//允许webkit执行js代码;
  24. //对象,插件名称
  25. //window.open()
  26. //document.write()
  27. //contact.xxx
  28. webView.addJavascriptInterface(newContactPlugin(),"contact");//为webkit添加插件,即java类
  29. webView.loadUrl("file:///android_asset/index.html");//加载html文件
  30. //webView.loadUrl("http://192.168.1.100:8080/web/index.html");
  31. }
  32. privatefinalclassContactPlugin{
  33. publicvoidgetContacts(){
  34. List<Contact>contacts=service.getContacts();
  35. //OO的方法将对象的数据转成json字符串;
  36. try{
  37. JSONArrayjsonArray=newJSONArray();//新建json数组
  38. for(Contactcontact:contacts){
  39. JSONObjectitem=newJSONObject();//新建json对象
  40. item.put("id",contact.getId());
  41. item.put("name",contact.getName());
  42. item.put("mobile",contact.getMobile());
  43. jsonArray.put(item);
  44. }
  45. Stringjson=jsonArray.toString();//得到json字符串;
  46. //webView.loadUrl("javascript:show('[{""},{}]')");
  47. webView.loadUrl("javascript:show('"+json+"')");//调用js的show方法;
  48. }catch(JSONExceptione){
  49. e.printStackTrace();
  50. }
  51. }
  52. publicvoidcall(Stringmobile){
  53. Intentintent=newIntent(Intent.ACTION_CALL,Uri.parse("tel:"+mobile));
  54. startActivity(intent);
  55. }
  56. }
  57. }


[html]
  1. ContactTest.java-----单元测试
  2. packagecn.itcast.html;
  3. importjava.util.List;
  4. importorg.json.JSONArray;
  5. importorg.json.JSONException;
  6. importorg.json.JSONObject;
  7. importcn.itcast.domain.Contact;
  8. importcn.itcast.service.ContactService;
  9. importandroid.test.AndroidTestCase;
  10. importandroid.util.Log;
  11. publicclassContactTestextendsAndroidTestCase{
  12. privatestaticfinalStringTAG="MainActivity";
  13. publicvoidtestContact()throwsException{
  14. List<Contact>contacts=newContactService().getContacts();
  15. //OO的方法将对象的数据转成json字符串;
  16. JSONArrayjsonArray=newJSONArray();//新建json数组
  17. for(Contactcontact:contacts){
  18. JSONObjectitem=newJSONObject();//新建json对象
  19. item.put("id",contact.getId());
  20. item.put("name",contact.getName());
  21. item.put("mobile",contact.getMobile());
  22. jsonArray.put(item);
  23. }
  24. Stringjson=jsonArray.toString();//得到json字符串;
  25. Log.i(TAG,json);
  26. }
  27. }
[html]
  1. AndroidManifest.xml
  2. <?xmlversion="1.0"encoding="utf-8"?>
  3. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  4. package="cn.itcast.html"
  5. android:versionCode="1"
  6. android:versionName="1.0">
  7. <uses-sdkandroid:minSdkVersion="8"/>
  8. <application
  9. android:icon="@drawable/ic_launcher"
  10. android:label="@string/app_name">
  11. <uses-libraryandroid:name="android.test.runner"/>
  12. <activity
  13. android:name=".MainActivity"
  14. android:label="@string/app_name">
  15. <intent-filter>
  16. <actionandroid:name="android.intent.action.MAIN"/>
  17. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  18. </intent-filter>
  19. </activity>
  20. </application>
  21. <uses-permissionandroid:name="android.permission.CALL_PHONE"/>
  22. <uses-permissionandroid:name="android.permission.INTERNET"/>
  23. <instrumentationandroid:name="android.test.InstrumentationTestRunner"
  24. android:targetPackage="cn.itcast.html"android:label="MyFileTest"/>
  25. </manifest>
[html]
  1. /layout/main.xml
  2. <?xmlversion="1.0"encoding="utf-8"?>
  3. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:orientation="vertical">
  7. <WebView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:id="@+id/webView"
  11. />
  12. </LinearLayout>

更多相关文章

  1. 网络界面Android(安卓)网络连接--Wifi/3G
  2. Android之WebView优化之路
  3. Android自定义控件一简介
  4. Android界面布局的几种常用方式
  5. 避免Android中Context引起的内存泄露
  6. Android(安卓)内存优化
  7. Android中使用占位符
  8. Android的垃圾回收机制(android refbase类(sp wp))
  9. Android(安卓)实用工具Hierarchy Viewer实战

随机推荐

  1. 我埋头吭哧吭哧写文这一年半
  2. 如何找到属于自己高效学习方法?
  3. 小鹿周末总结
  4. 图文分析:Python语言的惊人成长之路
  5. 福布斯系列之补充数据收集 | Python数据
  6. 动画:面试如何轻松手写链表?
  7. 刚接触编程我入过的坑(强烈建议初学者好好
  8. 面试必知必会|理解C++虚函数
  9. 白话布隆过滤器BloomFilter
  10. 福布斯系列之数据清洗(2) | Python数据分析