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