最近开发过程中,关于Webview遇到了一些问题,现在总结下:
问题一 webview无法缩放
- 首先 WebView要做出如下设置,才能支持缩放
WebView webView= (WebView) layout.findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
- 其次 设置WevView要显示的网页:
webView.loadUrl("http://www.baidu.com");
webView.loadUrl("file://android_asset/webview_test.html");
如果使用的是webview使用的是loadData()
方法,貌似是不能缩放的
- 最后,如果h5页面中设置了
user-scalable=no
,也是不能缩放的,需要将这句话删除或者改为user-scalable=yes
问题2 WebView设置点击事件不生效
webView.setOnClickListener失效
解决方案:
public class ClickableWebView extends WebView {
private static final int MAX_CLICK_DURATION = 200;
private long startClickTime;
public ClickableWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ClickableWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ClickableWebView(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
startClickTime = Calendar.getInstance().getTimeInMillis();
break;
}
case MotionEvent.ACTION_UP: {
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if(clickDuration < MAX_CLICK_DURATION) {
super.performClick();
}
}
}
return true;
}
}
问题三 获取网页图片url
webview长按后,通过getHitTestResult()方法可以得到一个HitTestResult对象,通过这个对象可以知道点击区域的内容是什么mimeType以及对应的url。
webView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
HitTestResult result = vWeb.getHitTestResult();
if (result.getType() == HitTestResult.IMAGE_TYPE) { //如果是图片类型,那么extra里边携带的就是图片url
String url = result.getExtra();
return true;
}
return false;
}
});
问题四 网页支付宝支付在部分手机上可以,在华为手机上不行
最近遇到一个很纠结的问题,h5的支付宝支付是前台做的,但是问题是在苹果手机上和部分安卓手机上是可以的,但是在华为手机上不行,后来发现在webview的设置中有这么一句话webSettings.setUserAgentString("MicroMessager");
涉及支付安全,难怪一直提醒支付风险