关于webview使用遇到的问题

最近开发过程中,关于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");
涉及支付安全,难怪一直提醒支付风险

你可能感兴趣的:(安卓进阶)