Webview内嵌在ScrollView中的底部空白和滑动冲突
发布日期:2022-02-25 00:55:14 浏览次数:49 分类:技术文章

本文共 3365 字,大约阅读时间需要 11 分钟。

重新计算Webview的内容高度,并设置到Webview
 
@JavascriptInterfacepublic 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. *

* * {

@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; }}

转载地址:https://blog.csdn.net/qq_30167925/article/details/56282823 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Webview内存泄漏与内存占用过大OOM的优化
下一篇:fbcunn在Ubuntu 14.04下安装可能出现的问题以及解决方法

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月25日 01时44分26秒