- Android与Html通过JS交互,可以相互传递参数
- 设置对js支持
webSettings.setJavaScriptEnabled(true);
- Html对Android 传递数据,需要在html中定义下放的方法,然后在Android需要配置相同的方法函数接受传递过来的数据
webview.addJavascriptInterface(new MyJavascriptInterface(),"android");
- MyJavascriptInterface.class
private class MyJavascriptInterface{
@JavascriptInterface
public void uploadPlusMallImg(String fId){
Log.v("===========","str="+str);//接收传递过来的参数
}
}
Html中需要定义与uploadPlusMallImg()相同的函数
- Android传递数据给Html
webview.loadUrl("javascript:getUploadPlusMallParam('" + path + "','" + fId + "')");
getUploadPlusMallParam()函数在html中必须定义相同的接收Android传递数据。
到此webview就可以完美的与html交互。
- Webview的使用配置
WebSettings webSettings = webview.getSettings();
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webSettings.setSupportZoom(false);/*支持缩放*/
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setBuiltInZoomControls(true);//support zoom
webSettings.setMediaPlaybackRequiresUserGesture(true);
webSettings.setUseWideViewPort(true);// 这个很关键
webSettings.setLoadWithOverviewMode(true);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int mDensity = metrics.densityDpi;
if (mDensity == 240) {
webSettings.setDefaultZoom(WebSettings.ZoomDensity.FAR);
} else if (mDensity == 160) {
webSettings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
} else if(mDensity == 120) {
webSettings.setDefaultZoom(WebSettings.ZoomDensity.CLOSE);
}else if(mDensity == DisplayMetrics.DENSITY_XHIGH){
webSettings.setDefaultZoom(WebSettings.ZoomDensity.FAR);
}else if (mDensity == DisplayMetrics.DENSITY_TV){
webSettings.setDefaultZoom(WebSettings.ZoomDensity.FAR);
}
webview.setWebViewClient(new MyWebViewClient());
webview.setWebChromeClient(new MyWebChromeClient());
webview.loadUrl(webUrl);
- MyWebViewClient类一般需要重写的方法函数
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
}
- MyWebChromeClient类
public class MyWebChromeClient extends WebChromeClient {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
LogUtils.LOG_V("title=="+title);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
mProgressBar.setProgress(newProgress);
if(newProgress>=100){
mProgressBar.setVisibility(View.GONE);
}else {
mProgressBar.setVisibility(View.VISIBLE);
}
}
}