如何使布局与recyclerview一起滚动
Posted
技术标签:
【中文标题】如何使布局与recyclerview一起滚动【英文标题】:How to make the layout scroll along with the recyclerview 【发布时间】:2021-05-17 20:51:08 【问题描述】:我想知道如何像 facebook 一样进行此滚动,您可以在其中滚动 recyclerview 并且上面的视图会滚动到屏幕外,我已经尝试使用 nestedscroll 并将 recyclerview 作为 wrap_content,但是它会加载之前的所有项目打开它变得非常沉重,实际上应用程序甚至无法打开,崩溃一切......我也会发布我的布局代码,记住这个布局在一个片段内,就像 facebook 就在那里,使用viewpager 及其内部有链接到 tablayout 和自定义工具栏的片段,然后这个带有视图的 recyclerview 位于片段中的布局中[在此处输入链接描述][1]
例如GIF >> [1]:https://giphy.com/gifs/1g6zXNE3EE5MLuE7Cy
我的带有 recyclerview 的 xml 代码(这是片段布局)>>
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
xmlns:tools="http://schemas.android.com/tools"
android:fillViewport="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_
tools:context=".fragments.Home">
<LinearLayout
android:id="@+id/linearLayout4"
android:layout_
android:layout_
android:background="@color/white"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/linearLayoutCompat"
android:layout_
android:layout_
android:layout_marginTop="16dp">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_
android:layout_
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:src="@mipmap/ic_launcher" />
<Button
android:id="@+id/button"
android:layout_
android:layout_
android:layout_marginTop="4dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="4dp"
android:background="@drawable/retangulo_pontas_arredondadas"
android:text="No que você esta pensando?"
android:textAlignment="viewStart"
android:textAppearance="@style/botaobraco" />
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_
android:layout_
android:layout_marginTop="8dp"
android:orientation="horizontal">
<Button
android:id="@+id/button4"
android:layout_
android:layout_
android:layout_marginEnd="1dp"
android:layout_weight="1"
android:text="Foto"
android:textAlignment="viewStart"
app:icon="@drawable/photo_icon" />
<Button
android:id="@+id/button5"
android:layout_
android:layout_
android:layout_marginStart="1dp"
android:layout_weight="1"
android:text="Video"
android:textAlignment="viewStart"
app:icon="@drawable/video_icon" />
</LinearLayout>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewPubs"
android:layout_
android:layout_
android:layout_marginBottom="1dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout4" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
带有 viewpager 和工具栏的我的 xml(接收者的片段)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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_
android:layout_
android:orientation="vertical">
<include layout="@layout/toolbar"
app:layout_scrollFlags="scroll|enterAlways"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_
android:layout_
android:elevation="4dp"
android:theme="@style/toolbarstyle"
app:tabMode="fixed" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/container"
android:layout_
android:layout_
android:layout_weight="1"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</LinearLayout>
在recyclerview中显示的xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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_
android:layout_>
<androidx.cardview.widget.CardView
android:layout_
android:layout_
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_>
<ImageView
android:id="@+id/image_pub"
android:layout_
android:layout_
android:layout_marginBottom="8dp"
android:scaleType="centerCrop"
app:layout_constraintBottom_toTopOf="@+id/linearLayout2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
app:srcCompat="@drawable/ds" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linearLayout2"
android:layout_
android:layout_
android:layout_marginTop="8dp"
android:background="@drawable/borda_abaixo"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@+id/linearLayout3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/image_pub">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/image_author_pub"
android:layout_
android:layout_
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:src="@mipmap/ic_launcher"
app:layout_constraintBottom_toTopOf="@+id/desc_pub"
app:layout_constraintEnd_toStartOf="@+id/name_author_pub"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/name_author_pub"
android:layout_
android:layout_
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:text="@string/app_name"
app:layout_constraintBottom_toBottomOf="@+id/image_author_pub"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/image_author_pub"
app:layout_constraintTop_toTopOf="@+id/image_author_pub" />
<TextView
android:id="@+id/desc_pub"
android:layout_
android:layout_
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:maxLines="10"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas placerat tristique nulla scelerisque faucibus. Cras sollicitudin consequat risus id cursus. Nunc sit amet condimentum dui. Nam dictum lacinia nibh, eget vehicula sapien. Vestibulum eget tortor at nisl faucibus cursus eget quis arcu. Maecenas egestas, nulla id accumsan eleifend, mauris leo ornare elit, quis porta turpis metus eget tortor. Donec ultrices neque nec aliquet commodo. In dolor lorem, lobortis vel tincidunt ut, bibendum vel ligula. Nulla facilisi."
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/image_author_pub"
app:layout_constraintTop_toBottomOf="@+id/image_author_pub" />
<TextView
android:id="@+id/more_desc_pub"
android:layout_
android:layout_
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:drawableEnd="@android:drawable/arrow_down_float"
android:text="ver mais"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/desc_pub" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_
android:layout_
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout2">
<Button
android:id="@+id/curtir_pub"
android:layout_
android:layout_
android:layout_marginEnd="1dp"
android:layout_weight="1"
android:text="Curtir"
android:textColor="@color/black" />
<Button
android:id="@+id/comentar_pub"
android:layout_
android:layout_
android:layout_marginStart="1dp"
android:layout_weight="1"
android:text="Comentar"
android:textColor="@color/black" />
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout3">
<TextView
android:id="@+id/curtidas_pub"
android:layout_
android:layout_
android:layout_marginStart="8dp"
android:layout_weight="1"
android:text="800 Curtidas" />
<TextView
android:id="@+id/coments_pub"
android:layout_
android:layout_
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:text="300 Comentarios"
android:textAlignment="viewEnd" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
【问题讨论】:
【参考方案1】:查看协调器布局,这就是您共享的 GIF 中的滚动和过渡所需要的。
【讨论】:
我已经尝试过,已经研究过,甚至下载了他们使用的应用程序,但我不能以一种像样的方式做到这一点,如果你可以通过给我小费或发布代码 sn-ps 和解释来帮助我,我会接受【参考方案2】:我设法解决了这个问题,为此我必须在 RecyclerView 中使用 MultiView,任何我想要的人都会留下链接来解释它是如何完成的。
Link
【讨论】:
以上是关于如何使布局与recyclerview一起滚动的主要内容,如果未能解决你的问题,请参考以下文章
如何使 RecyclerView 与 Composable ViewHolder 渲染更快?
将 RecyclerView 与 FirestoreRecyclerAdapter 一起使用时如何设置滚动位置?
如何让视图绑定与 RecyclerView.ViewHolder 中的 XML 布局高度一起使用,就像他们对 Kotlin Synthetics 所做的那样?