webview与javascript交互实现图文混排效果,感觉还不错!
直接上demo吧。
demo1:
template.html
function load_title(title) {
var t = document.getElementById("title");
t.innerHTML = title;
}
function load_content(content) {
var c = document.getElementById("content");
c.innerHTML = content;
}
function load_img(img) {
var i = document.getElementById("img");
i.src = img;
}
MainActivity.java文件:
public class MainActivity extends Activity {
private WebView webView;
private Button loadHtml;
private String str="这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这";
// 我们用它来完成我们的异步调用 ,当我new这个对象出来,它会绑定到当前
// activity消息队列里去,如果发现它里面新建了Runnable,它就会新建一个线程去。。。
private Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webviewtestlayout);
webView = (WebView) this.findViewById(R.id.webView);
// 支持javaScript
webView.getSettings().setJavaScriptEnabled(true);
// 不保存表单数据
webView.getSettings().setSaveFormData(false);
// 不保存密码
webView.getSettings().setSavePassword(false);
// 不支持页面放大功能
webView.getSettings().setSupportZoom(false);
// 把我们的页面显示出来
webView.loadUrl("file:///android_asset/template.html");
loadHtml = (Button)findViewById(R.id.loadHtml);
loadHtml.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// FIXME Auto-generated method stub
handler.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:load_title('" + "My Title"
+ "')");
webView.loadUrl("javascript:load_content('" + str
+ "')");
webView.loadUrl("javascript:load_img('" + "/sdcard/dzsy.jpg"
+ "')");
}
});
}
});
}
demo2是有交互的:
index.html文件:
//我们传入的jsondata是一个数组如:
//[{id:20,name:"王昌龙",phone:"18701445755"},......] 这样
function show(jsondata){
var jsonobjs = eval(jsondata);
var table = document.getElementById("personTable");
for(var y=0; y var tr = table.insertRow(table.rows.length); //添加一行 tr.onmouseover = function (){ this.style.backgroundColor= "red"; } tr.onmouseout = function (){ this.style.backgroundColor= "#000000"; } //添加三列 var td1 = tr.insertCell(0); var td2 = tr.insertCell(1); td2.align = "center"; var td3 = tr.insertCell(2); //设置列内容和属性 td1.innerHTML = jsonobjs[y].id; //转义 td2.innerHTML = ""+ jsonobjs[y].name + ""; td3.innerHTML = jsonobjs[y].phone; } } function init(){ var jsondata = "[{id:20,name:/"王昌龙/",phone:/"18701445755/"},{id:21,name:/"小妾/",phone:/"18701445755/"}]"; show(jsondata); } MainActivity.java文件: public class MainActivity extends Activity { private WebView webView; private Button loadHtml; // 我们用它来完成我们的异步调用 ,当我new这个对象出来,它会绑定到当前 // activity消息队列里去,如果发现它里面新建了Runnable,它就会新建一个线程去。。。 private Handler handler = new Handler(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webviewtestlayout); webView = (WebView) this.findViewById(R.id.webView); // 支持javaScript webView.getSettings().setJavaScriptEnabled(true); // 不保存表单数据 webView.getSettings().setSaveFormData(false); // 不保存密码 webView.getSettings().setSavePassword(false); // 不支持页面放大功能 webView.getSettings().setSupportZoom(false); webView.addJavascriptInterface(new Partner4javaJavaScript(), "partner4java"); // 把我们的页面显示出来 webView.loadUrl("file:///android_asset/index.html"); loadHtml = (Button)findViewById(R.id.loadHtml); loadHtml.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // FIXME Auto-generated method stub handler.post(new Runnable() { @Override public void run() { // // 可以通过访问SQLite访问数据库获取 List contacts.add(new Contact(12, "王昌龙", "18701445755")); contacts.add(new Contact(13, "小妾", "18701445755")); webView.loadUrl("javascript:show('" + buildJson(contacts) + "')"); } }); } }); } private String buildJson(List try { JSONArray jsonArray = new JSONArray(); for (Contact contact : contacts) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id", contact.getId()); jsonObject.put("name", contact.getName()); jsonObject.put("phone", contact.getPhone()); jsonArray.put(jsonObject); } return jsonArray.toString(); } catch (JSONException e) { e.printStackTrace(); } return null; } private final class Partner4javaJavaScript { /** * 获取所有联系人 */ public void getContacts() { handler.post(new Runnable() { @Override public void run() { // 可以通过访问SQLite访问数据库获取 List contacts.add(new Contact(12, "王昌龙", "18701445755")); contacts.add(new Contact(13, "小妾", "18701445755")); webView.loadUrl("javascript:show('" + buildJson(contacts) + "')"); } }); } /** * 生成Json格式的数据 * * @param contacts * @return */ private String buildJson(List try { JSONArray jsonArray = new JSONArray(); for (Contact contact : contacts) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id", contact.getId()); jsonObject.put("name", contact.getName()); jsonObject.put("phone", contact.getPhone()); jsonArray.put(jsonObject); } return jsonArray.toString(); } catch (JSONException e) { e.printStackTrace(); } return null; } /** * 回调方法 * @param phone */ public void call(final String phone){ handler.post(new Runnable() { @Override public void run() { startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ phone))); } }); } } }