Android中采用html页面布局以及调用JavaScript
在我们开发项目的有些时候,采用Android的layout布局有时候根本满足不了我们对于界面的要求,有时候没有web页面那样炫。其实android也可以采用最原始的html
页面来进行布局,这样我们可以修改html页面来满足我们的需求,达到一个很炫的效果。android中我们也可以利用javascript来帮我们实现一些很简单的应用。其他的话不多说啦,直接开始项目的介绍吧。。。
1.我们需要将我们的html页面放入andorid中的assets文件夹下,然后新建一个images文件夹,放入一张图片。
这个是我们放好页面后的工程目录。index.html的代码如下:
- <!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:contact.call(\""+ jsonobjs[y].mobile+ "\")'>"+ jsonobjs[y].mobile+ "</a>";
- }
- }
- </script>
- </head>
- <!-- js代码通过webView调用其插件中的java代码 -->
- <body onload="javascript:contact.getContacts()">
- <table border="0" width="100%" id="personTable" cellspacing="0">
- <tr bgcolor="#00FFCC">
- <td width="20%">编号</td><td width="40%" align="center">姓名</td><td align="center">电话</td>
- </tr>
- </table>
- <img src="images/img.png" >
- <a href="javascript:window.location.reload()">刷新</a>
- <a href="javascript:contact.startAcivity()">跳转</a>
- </body>
- </html>
复制代码
2. 我们需要一个类来加载html页面以及javascript的调用
MainActivity的代码如下:
- package com.chinasofti.html;import java.util.List;import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import com.chinasofti.domain.Contact;
- import com.chinasofti.service.ContactService;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 static final String TAG = "MainActivity";
- private ContactService contactService;
- private WebView webView;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- contactService = new ContactService();
- webView = (WebView)this.findViewById(R.id.webView);
- webView.getSettings().setJavaScriptEnabled(true);
- //设置javaScript可用
- //window.open()
- webView.addJavascriptInterface(new ContactPlugin(), "contact");
- webView.loadUrl("file:///android_asset/index.html");
- // webView.loadUrl("http://192.168.1.100:8080/videoweb/index.html");
- }
-
- private final class ContactPlugin{
- public void getContacts(){
- List<Contact> contacts = contactService.getContacts();
- try {
- JSONArray array = new JSONArray();
- for(Contact contact : contacts){
-
- JSONObject item = new JSONObject();
- item.put("id", contact.getId());
- item.put("name", contact.getName());
- item.put("mobile", contact.getMobile());
- array.put(item);
- }
- String json = array.toString();
- Log.i(TAG, json);
- webView.loadUrl("javascript:show('"+ json +"')");
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
-
- public void call(String mobile){
- Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ mobile));
- startActivity(intent);
- }
- public void startAcivity(){
- Intent intent =new Intent(MainActivity.this,NewActivity.class);
- startActivity(intent);
- }
- }
- }
复制代码
在html页面中,我们可以点击超链接跳转到android中的Activity去,我们新建一个NewActivity
NewActivity代码如下:
- package com.chinasofti.html;
- import android.app.Activity;
- import android.os.Bundle;
- public class NewActivity extends Activity{
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.msg);
- }
-
- }
复制代码
布局文件中
main.xml的代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <WebView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/webView"
- />
- </LinearLayout>
复制代码
msg.xml代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <EditText
- android:id="@+id/editText1"
- android:hint="@string/input"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
-
- </EditText>
- </LinearLayout>
复制代码
业务逻辑类 ContactService的代码如下:
- package com.chinasofti.service;
- import java.util.ArrayList;
- import java.util.List;
- import com.chinasofti.domain.Contact;
- public class ContactService {
-
- public List<Contact> getContacts(){
- List<Contact> contacts = new ArrayList<Contact>();
- contacts.add(new Contact(34, "张三", "1398320333"));
- contacts.add(new Contact(39, "李四", "1332432444"));
- contacts.add(new Contact(67, "王五", "1300320333"));
- return contacts;
- }
- }
复制代码
用户实体类的代码如下:
- package com.chinasofti.domain;
- public class Contact {
- private Integer id;
- private String name;
- private String mobile;
- public Integer getId() {
- return id;
- }
- 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;
- }
- public Contact(Integer id, String name, String mobile) {
- super();
- this.id = id;
- this.name = name;
- this.mobile = mobile;
- }
-
- }