您的位置:首页 > 移动开发

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

2017-02-21 14:55 387 查看
重新计算Webview的内容高度,并设置到Webview
@JavascriptInterfacepublic void resize(final float height) {runOnUiThread(new Runnable() {@Overridepublic 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() {@Overridepublic 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}*/@Overridepublic 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 soif (distanceY > mTouchSlop && distanceX < mTouchSlop){L.e(VIEW_LOG_TAG, "intercepted");return true;}distanceX = 0;distanceY = 0;break;}return false;}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: