android - 在 NestedScrollView 内拖动滚动条
问题描述
一段时间以来,当 recyclerview/Nestedscrollview 放入 NestedSCrollView 时,我遇到了滚动条问题。但是我知道在另一个滚动布局中使用滚动布局并不是一个好习惯,但必须在我的一个应用程序中解决这个问题。
即,当您尝试通过拖动垂直滚动条来滚动列表时,它会在几个像素后滚动中断。尝试了所有但没有成功。
这是测试布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="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"
tools:context=".TestingScrollbars">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="200dp"
app:expanded="false"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:gravity="bottom"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.constraint.ConstraintLayout
xmlns:android="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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".TestingScrollbars"
tools:showIn="@layout/activity_main">
<android.support.v4.widget.NestedScrollView
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:layout_width="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0"
android:layout_height="wrap_content">
<RelativeLayout android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="400dp"
android:gravity="center"
android:text="testing"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_below="@+id/tv"
android:scrollbars="vertical"
android:fadeScrollbars="false"
android:nestedScrollingEnabled="true"
android:layout_width="wrap_content"
android:padding="15dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.constraint.ConstraintLayout>
</android.support.design.widget.CoordinatorLayout>
活动.kt
package com.example.testingscrollbars
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
class TestingScrollbars : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
val recyclerView = findViewById<RecyclerView>(R.id.recyclerview)
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = CustomAdapter(getAdapterList())
recyclerView.isVerticalScrollBarEnabled = true
}
private fun getAdapterList(): List<Item> {
val list = ArrayList<Item>()
list.add(Item("first pri. text", "first sec. text"))
list.add(Item("second pri. text", "second sec. text"))
list.add(Item("third pri. text", "third sec. text"))
list.add(Item("something1 pri. text", "something1 sec. text"))
list.add(Item("something2 pri. text", "something2 sec. text"))
list.add(Item("something3 pri. text", "something3 sec. text"))
list.add(Item("something4 pri. text", "something4 sec. text"))
list.add(Item("something5 pri. text", "something5 sec. text"))
list.add(Item("something6 pri. text", "something6 sec. text"))
list.add(Item("something7 pri. text", "something7 sec. text"))
list.add(Item("something8 pri. text", "something8 sec. text"))
list.add(Item("something9 pri. text", "something9 sec. text"))
list.add(Item("something10 pri. text", "something10 sec. text"))
list.add(Item("something11 pri. text", "something11 sec. text"))
list.add(Item("something12 pri. text", "something12 sec. text"))
list.add(Item("something13 pri. text", "something13 sec. text"))
list.add(Item("something14 pri. text", "something14 sec. text"))
list.add(Item("something15 pri. text", "something15 sec. text"))
return list
}
class Item(val primary: String, val secondary: String)
class CustomAdapter(val list: List<Item>) : RecyclerView.Adapter<ViewHolder>() {
override fun onBindViewHolder(p0: ViewHolder, p1: Int) {
p0.tvPrimary.text = list[p1].primary
p0.tvSecondary.text = list[p1].secondary
}
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): ViewHolder =
ViewHolder(LayoutInflater.from(p0.context).inflate(R.layout.recycler_item, p0, false))
override fun getItemCount(): Int = list.size
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val tvPrimary = view.findViewById<TextView>(R.id.tv_primary)
val tvSecondary = view.findViewById<TextView>(R.id.tv_Secondary)
}
}
解决方案
已经有一个关于它的问题。它可能会帮助你。ScrollView 中的 RecyclerView 不起作用
但最好的做法是不要在另一个滚动组件中使用滚动组件。这会使操作系统感到困惑,当您开始拖动时,它将无法决定滚动哪个组件。
推荐阅读
- ios - UIScrollView 内的动态 UITableView
- emoji - 如何在节点上放置表情符号(图像)
- python - Python在数组中赋值
- javascript - 尝试在异步函数中传递值时出错(条带充电过程)
- python - Python 通过 pip3 安装包:分段错误
- node.js - “express-session 不推荐使用未定义的重新保存选项;提供重新保存选项 node_modules/admin-bro-expressjs/plugin.js:138:14”
- java - 运行 Spring Boot 应用程序时创建 bean 时出错
- reactjs - 在 React 中提交后将 textarea 设置为原始
- html - 否定伪类选择器 [:not()] 未按预期工作
- c - 在 Mac 上的 Visual Studio Community 2017 中使用 C 语言编程