一般情况下,实现软件的布局可以有以下三种方式:布局文件(即****.xml文件)、编码的方式。。
而第三种就是我们这一边博客所要讲解的,通过网页实现软件的布局
原理:
网页实现界面:
1) 数据:应该来自于手机本身
webview 可以把一个java对象传递给网页,再让javascript去调用这个对象里面的方法
2) onload() javascript 代码调用java代码 java再调用javascript
明白2)中的流程是理解这种实现软件布局的方式的关键。。
以下通过一个例子来讲解:
程序运行截图:
实现步骤
1、在/assets/目录下导入网页布局文件.这里是index.html
下载链接为:
http://download.youkuaiyun.com/detail/caihongshijie6/6294611
2、main.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" >
<WebView
android:id="@+id/webview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
3、MainAcitivty
package com.njupt.htmlui1;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.webkit.WebView;
public class MainActivity extends Activity {
private WebView webview;
private ContactService service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
service = new ContactService();
webview.addJavascriptInterface(new ContactPlugin(), "contact");
webview.getSettings().setJavaScriptEnabled(true);
//以下一行代码表示王烨在本地
// webview.loadUrl("file:///android_asset/index.html");
//网页在服务器端
webview.loadUrl("http://192.168.1.105:8080/Web4/index.html");
}
private class ContactPlugin {
public void showcontacts() {
try {
List<ContactInfo> contactInfos = service.getContacts();
JSONArray jsonArray = new JSONArray();
int i;
for (i = 0; i < contactInfos.size(); ++i) {
JSONObject jsonObject = new JSONObject();
ContactInfo info = contactInfos.get(i);
jsonObject.put("name", info.getName());
jsonObject.put("amount", info.getAmount());
jsonObject.put("phone", info.getPhone());
jsonArray.put(jsonObject);
}
String json = jsonArray.toString();
webview.loadUrl("javascript:show(" + json + ")");
} catch (Exception e) {
e.printStackTrace();
}
}
public void call(String phone) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
+ phone));
startActivity(intent);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
4、ContactInfo
package com.njupt.htmlui1;
public class ContactInfo {
private String name;
private long amount;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getAmount() {
return amount;
}
public void setAmount(long amount) {
this.amount = amount;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public ContactInfo(String name, long amount, String phone) {
super();
this.name = name;
this.amount = amount;
this.phone = phone;
}
public ContactInfo() {
super();
}
@Override
public String toString() {
return "ContactInfo [name=" + name + ", amount=" + amount + ", phone="
+ phone + "]";
}
}
5、ContactService
package com.njupt.htmlui1;
import java.util.ArrayList;
import java.util.List;
public class ContactService {
public List<ContactInfo> getContacts(){
List<ContactInfo> contacts = new ArrayList<ContactInfo>();
contacts.add(new ContactInfo("zzt", 40000, "123456"));
contacts.add(new ContactInfo("lss", 42000, "223457"));
contacts.add(new ContactInfo("liuyifei", 44000, "3345678"));
contacts.add(new ContactInfo("allen", 45000, "499999"));
return contacts;
}
}
6、记得在AndroidManifest.xml清单文件中注册上相应的权限
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.INTERNET"/>