下面是我的代码,用于处理我的应用程序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=”垂直“>
发布于 2019-04-06 06:11:08
请试试下面的代码:
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:
<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" />发布于 2018-03-16 20:18:47
它为我工作,将这一行添加到XML中的NestedScrollview中。
android:fillViewport="true"然后设置webview高度wrap_content。
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>发布于 2017-12-07 20:22:34
我有一个类似的问题,并且用setFillViewport (true)解决了它,这是我的代码的一部分
NestedScrollView scrollView = (NestedScrollView) findViewById (R.id.nest_scrollview);
scrollView.setFillViewport (true);在片段里,我有一个listView,我坐在android:nestedScrollingEnabled="true" ..。修正了滚动问题
https://stackoverflow.com/questions/47541793
复制相似问题