Webview内嵌在ScrollView中的底部空白和滑动冲突

重新计算Webview的内容高度,并设置到Webview

@JavascriptInterface
public void resize(final float height) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            //Toast.makeText(getActivity(), height + "", Toast.LENGTH_LONG).show();
            //此处的 layoutParmas 需要根据父控件类型进行区分,这里为了简单就不这么做了
            webView.setLayoutParams(new FrameLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density)));
        }
    });
}
 
主动调用:
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
	//获取html可见的高度,会有出错
        webView.loadUrl("javascript:App.resize(document.body.getBoundingClientRect().height)");
	//获取第一个快元素的高度,效率更好
	webView.loadUrl("javascript:App.resize(document.getElementsByTagName('div')[0].scrollHeight)");
super.onPageFinished(view, url); }});webView.addJavascriptInterface(this, "App");

 
//别忘了设置webview支持javascript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);

 
--------------------------------------------------屏蔽Scrollview内的滑动事件-----------------------------------------------
package com.xiaoyan.chat.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.ScrollView;

import com.xiaoyan.chat.util.L;

public class TolerantScrollView extends ScrollView {

   private int mLastX;
   private int mLastY;
   
   private int distanceX;
   private int distanceY;
   
   private int mTouchSlop;
   
   public TolerantScrollView(Context context, AttributeSet attrs, int defStyle) {
      super(context, attrs, defStyle);
      init();
   }

   public TolerantScrollView(Context context, AttributeSet attrs) {
      super(context, attrs);
      init();
   }

   public TolerantScrollView(Context context) {
      super(context);
      init();
   }
   
   private void init(){
      /**
       * define touch slop according to the display
       */
        final ViewConfiguration configuration = ViewConfiguration.get(getContext());
        mTouchSlop = configuration.getScaledTouchSlop();
   }
   /**
    * Processes every touch event through the {@link #onTouchEvent(MotionEvent)}
    * and intercepts if only we have restricted vertical scrolling.
    * <p>
    * 
    * {@inheritDoc}
    */
   @Override
   public boolean onInterceptTouchEvent(MotionEvent ev) {
      onTouchEvent(ev);
      int dy = 0;
      int dx = 0;
      switch(ev.getAction()){
      case MotionEvent.ACTION_DOWN:
         distanceX = 0;
         distanceY = 0;
         mLastX = (int) ev.getX();
         mLastY = (int) ev.getY();
         break;
      case MotionEvent.ACTION_MOVE:
         dx = Math.abs((int) (mLastX - ev.getX()));
         mLastX = (int) ev.getX();
         distanceX += dx;
         dy = Math.abs((int) (mLastY - ev.getY()));
         mLastY = (int) ev.getY();
         distanceY += dy;
         break;
      case MotionEvent.ACTION_CANCEL:
      case MotionEvent.ACTION_UP:
         // define whether we have vertical scrolling 
         // without horizontal one and intercept if so
         if (distanceY > mTouchSlop && distanceX < mTouchSlop){
            L.e(VIEW_LOG_TAG, "intercepted");
            return true;
         }     
         distanceX = 0;
         distanceY = 0;
         break;
      }
      return false;
   }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值