首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只滚动NestedScrollView webView的NestedScrollView

只滚动NestedScrollView webView的NestedScrollView
EN

Stack Overflow用户
提问于 2017-11-28 22:13:09
回答 3查看 7.3K关注 0票数 10

下面是我的代码,用于处理我的应用程序actionBar/工具栏/tabBar和nestedScrollView的正确行为,其中包含一个ViewPager (webView)。ViewPager基本上是一个普通的webView。

一切都很好,除了我的ViewPager不能垂直滚动。只有NestedScrollView正在滚动。我想要和Facebook应用程序一样的行为,如果你滚动新闻提要(webView),tabBar会垂直移动工具栏。

http://schemas.android.com/apk/res/android“xmlns:app="http://schemas.android.com/apk/res-auto”xmlns:tools="http://schemas.android.com/tools“android:layout_width="match_parent”android:layout_height="match_parent“android:orientation=”垂直“>

EN

回答 3

Stack Overflow用户

发布于 2019-04-06 06:11:08

请试试下面的代码:

代码语言:javascript
复制
class NestedScrollWebView constructor(
        context: Context,
        attrs: AttributeSet): WebView(context, attrs), NestedScrollingChild2 {

    private var lastMotionY = 0
    private var nestedYOffset = 0
    private val scrollOffset = IntArray(2)
    private val scrollConsumed = IntArray(2)
    private val childHelper = NestedScrollingChildHelper(this)

    init {
        isNestedScrollingEnabled = true
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        if (event == null) return false

        val motionEvent = MotionEvent.obtain(event)
        val currentY = event.y.toInt()

        when (event.action) {
            MotionEvent.ACTION_DOWN -> {
                nestedYOffset = 0
                lastMotionY = currentY
                startNestedScroll(View.SCROLL_AXIS_VERTICAL)
            }

            MotionEvent.ACTION_MOVE -> {
                var deltaY = lastMotionY - currentY

                if (dispatchNestedPreScroll(0, deltaY, scrollConsumed, scrollOffset)) {
                    deltaY -= scrollConsumed[1]
                    motionEvent.offsetLocation(0f, scrollOffset[1].toFloat())
                    nestedYOffset += scrollOffset[1]
                }

                lastMotionY = currentY - scrollOffset[1]

                val oldY = scrollY
                val newScrollY = Math.max(0, oldY + deltaY)
                val dyConsumed = newScrollY - oldY
                val dyUnconsumed = deltaY - dyConsumed

                if (dispatchNestedScroll(0, dyConsumed, 0, dyUnconsumed, scrollOffset)) {
                    lastMotionY -= scrollOffset[1]
                    motionEvent.offsetLocation(0f, scrollOffset[1].toFloat())
                    nestedYOffset += scrollOffset[1]
                }

                motionEvent.recycle()
            }

            MotionEvent.ACTION_POINTER_DOWN,
            MotionEvent.ACTION_UP,
            MotionEvent.ACTION_CANCEL -> stopNestedScroll()

            else -> { }
        }

        return super.onTouchEvent(event)
    }

    override fun startNestedScroll(axes: Int, type: Int) = childHelper.startNestedScroll(axes, type)

    override fun stopNestedScroll(type: Int) = childHelper.stopNestedScroll(type)

    override fun hasNestedScrollingParent(type: Int) = childHelper.hasNestedScrollingParent(type)

    override fun dispatchNestedPreScroll(dx: Int, dy: Int, consumed: IntArray?, offsetInWindow: IntArray?, type: Int) =
            childHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow, type)

    override fun dispatchNestedScroll(dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int, dyUnconsumed: Int, offsetInWindow: IntArray?, type: Int) =
            childHelper.dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, offsetInWindow, type)

}

在布局中,只留下WebView:

代码语言:javascript
复制
<com.widget.NestedScrollWebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
票数 7
EN

Stack Overflow用户

发布于 2018-03-16 20:18:47

它为我工作,将这一行添加到XML中的NestedScrollview中。

代码语言:javascript
复制
 android:fillViewport="true"

然后设置webview高度wrap_content。

代码语言:javascript
复制
<WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
票数 6
EN

Stack Overflow用户

发布于 2017-12-07 20:22:34

我有一个类似的问题,并且用setFillViewport (true)解决了它,这是我的代码的一部分

代码语言:javascript
复制
 NestedScrollView scrollView = (NestedScrollView) findViewById (R.id.nest_scrollview);
    scrollView.setFillViewport (true);

在片段里,我有一个listView,我坐在android:nestedScrollingEnabled="true" ..。修正了滚动问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47541793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档