android webview 与 javascript交互

webview与javascript交互实现图文混排效果,感觉还不错!

直接上demo吧。

demo1:

template.html

loading...

 

 

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文件:

联系人列表

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 = new ArrayList();

contacts.add(new Contact(12, "王昌龙", "18701445755"));

contacts.add(new Contact(13, "小妾", "18701445755"));

webView.loadUrl("javascript:show('" + buildJson(contacts)

+ "')");

}

});

}

});

 

}

private String buildJson(List contacts) {

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 = new ArrayList();

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 contacts) {

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)));

   }

  });

 }

 

}

}

你可能感兴趣的:(android webview 与 javascript交互)