ScrollView嵌套WebView WebView自动滚动的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZuoZuoShengHen/article/details/85014274

最近项目中有用到WebView,然后底部又用需要展示原生的内容。于是就想到了用ScrollView嵌套WebView,

原来想的是WebView的高度固定,通过滑动WebView到临界值去交换滑动事件,但发现会有一些小问题。Ps: WebView未加载完全时能看到WebView底部的原生内容,而且滑动到WebView顶部获底部交换滑动事件时会有卡顿,没有联动的效果,影响用户体验。

于是乎只能换另一种方式:通过动态的获取WebView的内容设置WebView的高度:

javascript:MyApp.resize(document.body.getBoundingClientRect().height);

@JavascriptInterface
    public void resize(final float height) {

        mWebView.post(new Runnable() {
            @Override
            public void run() {
                if (mWebView != null) {
                    ViewGroup.LayoutParams params = mWebView.getLayoutParams();
                    params.width = getResources().getDisplayMetrics().widthPixels;
                    params.height = (int) (height * getResources().getDisplayMetrics().density);
                    mWebView.setLayoutParams(params);
                }
            }
        });
    }

当然还需要监听onDraw方法去监听WebView的内容变化去改变WebView的高度:

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (getContentHeight() != lastContentHeight) {
            lastContentHeight = getContentHeight();
            if (mOnContentChangeListener != null) {
                mOnContentChangeListener.onContentChange();
            }
        }
    }
 mWebView.setOnContentChangeListener(new CustomWebView.OnContentChangeListener() {
            @Override
            public void onContentChange() {
                if (mWebView != null) {
                    mWebView.loadUrl("javascript:MyApp.resize(document.body.getBoundingClientRect().height)");
                }
            }
        });

滑动事件交给ScrollView控制。但此时遇到一个问题困扰了我好久:有时候加载WebView的时候WebView会自动滚动到某一区域而不是顶部。

原来的思路是监听WebView的加载进度然后到100%的时候设置滚动到顶部,发现还是有瑕疵,因为自动滚动是发生在加载完成之后。后来灵机一动,想到ViewPager+Fragment+RecyclerView的时候有时候RecyclerView会自动滚动,想到可能是WebView抢占了焦点而导致的自动滚动,于是就在WebView的父布局加了一行:

android:descendantFocusability="blocksDescendants"

发现解决了!神奇,哈哈!~

至于descendantFocusability的作用可以看我上一篇博文:https://blog.csdn.net/ZuoZuoShengHen/article/details/85009176

猜你喜欢

转载自blog.csdn.net/ZuoZuoShengHen/article/details/85014274