android webview
1.WebvView是android内置的一款webkit高性能内部浏览器
2. (1)权限:<uses-permission android:name="android.permission.INTERNET"/>
(2)如果Html有JavaScript则需要设置: webView.getSettings().setJavaScriptEnabled(true);
(3)如果页面中有连接,点击连接希望在Webview中继续打开,必需设置webView.setWebViewClient(new WebViewClient());否则会用调用系统的浏览器打开。
new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
}
WebViewClient类的shouldOverrideUrlLoading方法,当打开一个连接时会调用此方法,url为要打开的网页地址.可以在特定的网页打开之前,做一些动作,也可以不打开网页
3.打开页面的方式
(1)打开互联网页面
webView.loadUrl(“http://www.google.com“); //get形式
webView.postUrl(url,EncodingUtils.getBytes(postData,"UTF-8")); //Post形式.url网址,postData参数:值
(2)打开本地文件
myWebView.loadUrl(“file:///android_asset/XX.html“)
文件存放在assets目录里,以file:///android_asset/开头,xx.html是文件名
(3)直接载入html字符串
myWebView.loadData(htmlString, "text/html", "utf-8");
4.后退与前进
按返回键时,如果不做任何处理,则会退出整个Browser,如果要返回到上一页使用webView.goBack();前进使用webView.goForward();如果达到历史顶端执行这两个动作则不会执行任何动作,所以在执行之前先进行判断:webView.canGoBack()和webView.canGoForward()。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
5.WebView与javascript交互
(1)javascript访问java代码
java代码: webView.addJavascriptInterface(new Object(){
public void onBack(){
}
},"test");
javascript: <a onClick="window.test.onBack ()">。
通过addJavascriptInterface(Object,String)方法
test是暴露给JS的接口名,对应Object对象实例,javascript通过window.test.onBack ()调用Object的onBack()方法。
当调用Object时,会另起一个线程
(2)java访问javascript
mWebView.loadUrl("javascript:test(‘aa‘)"); 其中test是javascript的方法
可在test函数里将数据alert,然后webview中重写WebChromeClient的onJsAlert函数,具体代码如下
[java] view plaincopy
wv.setWebChromeClient(new MyWebChromeClient());
final class MyWebChromeClient extends WebChromeClient{
@Override
public booleanonJsAlert(WebView view, String url, String message, final JsResult result) {
//message就是test函数里alert的字符串,这样你就可以在android客户端里对这个数据进行处理
result.confirm();
}
return true;
}
6自定义一个带进度条的WebView
public class ProgressWebview extends WebView{
private ProgressBar progressBar;
public ProgressWebview(Context context, AttributeSet attrs) {
super(context, attrs);
progressBar = new ProgressBar(context, null,android.R.attr.progressBarStyleHorizontal);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,4,0,0));
addView(progressBar);
setWebChromeClient(new WebChrmoeClient());
}
/*
* 显示进度条
*/
public class WebChrmoeClient extends WebChromeClient{
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(newProgress==100){
progressBar.setVisibility(View.GONE);
}else {
if(progressBar.getVisibility() == GONE){
progressBar.setVisibility(View.VISIBLE);
}
progressBar.setProgress(newProgress);
}
super.onProgressChanged(view, newProgress);
}
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
// TODO Auto-generated method stub
return super.onJsAlert(view, url, message, result);
}
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
LayoutParams params = (LayoutParams) progressBar.getLayoutParams();
params.x = l;
params.y = t;
progressBar.setLayoutParams(params);
super.onScrollChanged(l, t, oldl, oldt);
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。