webView 组件本身就是一个浏览器实现,它的内核基于WebKit
1.使用WebView浏览网页:
常用方法:
void goBack():后退
void goForward():前进
void loadUrl (String url):加载指定的URL对应的网页
void loadUrl("file:///android_asset/XX.html"):加载本地文件
boolean zoomIn():放大网页
boolean zoomOut():缩小网页
Demo:
显示百度网页
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/url" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/go" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="访问" /> </LinearLayout> <WebView android:id="@+id/web" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
Activity代码:
public class MainActivity extends Activity { WebView show; EditText urlText; Button goButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); show = (WebView) findViewById(R.id.web); show.getSettings().setJavaScriptEnabled(true); goButton = (Button) findViewById(R.id.go); urlText = (EditText) findViewById(R.id.url); goButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String path = urlText.getText().toString(); show.loadUrl(path); } }); } }
2.使用WebView加载HTML代码:
WebView提供了一个方法用于加载HTML代码:
loadData(String data ,String mimeType ,String encoding):
data:指定需要加载的HTML代码
mimeType:指定HTML代码的MIME类型,对于HTML代码可指定为text/html
encoding:指定HTML代码编码所用的字符集,比如GBK
HTML代码:
<html> <head <title>无标题文档</title> </head> <body> <p> 使用WebView加载HTML代码: 打开百度网页: <a href="http://www.baidu.com"> http://www.baidu.com</a> </p> </body> </html>
Activity代码:
public class MainActivity extends Activity { WebView show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); show = (WebView) findViewById(R.id.web); StringBuilder sb = new StringBuilder(); sb.append("<html>" + "<head" + "<title>无标题文档</title>" + "</head>" + "<body>" + "<p>" + "使用WebView加载HTML代码:" + "打开百度网页:" + "<a href='http://www.baidu.com'> http://www.baidu.com</a>" + "</p>" + "</body>" + "</html>"); // 这个方法显示中文是乱码 // show.loadData(sb.toString(), "text/html", "utf-8"); show.loadDataWithBaseURL(null, sb.toString(), "text/html", "utf-8", null); } }
3.使用WebView中的JavaScript调用Android方法:
为了让WebView中的JavaScript脚本调用Android方法,WebView提供了一个WebSettings工具类
调用其中的setJavaScriptEnabled (true)即可让WebView中的JavaScript调用Android方法。
addJavascriptInterface (Object object ,String name )方法负责把object对象暴露成JavaScript中的name对象
setAllowFileAccess(true);// 设置允许访问文件数据
setBuiltInZoomControls(true);// 设置支持缩放
setSavePassword(false); // 设置是否保存密码
setUserAgentString("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X;en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334bSafari/531.21.10");//支持各种不同的设备
步骤:
1.调用WebView关联的WebSettings的setJavaScriptEnabled (true)启用JavaScript调用功能
2.调用addJavascriptInterface ()方法将object对象暴露给JavaScript
3.在JavaScript脚本中通过刚才暴露的name对象调用Android方法
Activity:
public class JsCallAndroid extends Activity { WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_js_call_android); webView = (WebView) findViewById(R.id.webview); //在assets文件夹中的test webView.loadUrl("file:///android_asset/test.html"); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); // 将MyObject对象暴露给JavaScript脚本 // 这样test.html页面中的JavaScript可以通过myObj来调用MyObject的方法 webView.addJavascriptInterface(new MyObject(this), "myObj"); } }
MyObject:
public class MyObject { Context mContext; MyObject(Context c) { mContext = c; } // 该方法将会暴露给JavaScript脚本调用 public void showToast(String name) { Toast.makeText(mContext, name + ",您好!", Toast.LENGTH_LONG).show(); } // 该方法将会暴露给JavaScript脚本调用 public void showList() { // 显示一个普通的列表对话框 new AlertDialog.Builder(mContext) .setTitle("图书列表") .setIcon(R.drawable.ic_launcher) .setItems( new String[] { "疯狂Java讲义", "疯狂Android讲义", "轻量级Java EE企业应用实战" }, null) .setPositiveButton("确定", null).create().show(); } }
原文地址:http://blog.csdn.net/u013476556/article/details/46391567