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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月25日 01时44分26秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java 并发工具包 java.util.concurrent 用户指南
2019-04-28
Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
2019-04-28
LinkedList 的实现原理浅析
2019-04-28
【集合框架】JDK1.8源码分析之HashMap(一)
2019-04-28
jdk1.8.0_45源码解读——ArrayList的实现
2019-04-28
小菜:Java异常处理的10个最佳实践
2019-04-28
java.nio.ByteBuffer用法小结
2019-04-28
深入理解ByteBuffer
2019-04-28
学习笔记之ByteBuffer使用和实现以及文件内存映射
2019-04-28
关于ByteBuffer使用解释
2019-04-28
ByteBuffer常用方法详解
2019-04-28
ByteBuffer的使用
2019-04-28
Java NIO系列教程(一) Java NIO 概述
2019-04-28
Java NIO系列教程(二) Channel
2019-04-28
Java NIO系列教程(三) Buffer
2019-04-28
Java NIO系列教程(四) Scatter/Gather
2019-04-28
Java NIO系列教程(五) 通道之间的数据传输
2019-04-28
Java NIO系列教程(六) Selector
2019-04-28
Java NIO系列教程(七) FileChannel
2019-04-28
Java NIO系列教程(八) SocketChannel
2019-04-28