ConstraintLayout 内的 NestedScrollView 不可滚动
Posted
技术标签:
【中文标题】ConstraintLayout 内的 NestedScrollView 不可滚动【英文标题】:NestedScrollView inside ConstraintLayout not scrollable 【发布时间】:2022-01-02 16:13:08 【问题描述】:我有一个ConstraintLayout
,里面还有几个其他部分也是ConstraintLayout
s。最后在底部我有两个RecyclerView
s 和一对按钮。我的目标是让layout_2
下方的屏幕部分可滚动——这样就包括两个RecyclerView
s 和几个附带的标签。然后这两个按钮必须始终可见。
代码:
<?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"
android:layout_
android:layout_
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/picker_performance_grey"
android:padding="20dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_1"
android:layout_
android:layout_
android:layout_marginTop="10dp"
android:background="@color/colorWhite"
android:padding="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<!-- some widgets-->
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_2"
android:layout_
android:layout_
android:layout_marginTop="10dp"
android:background="@color/colorWhite"
android:padding="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_1">
<!-- some widgets-->
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.core.widget.NestedScrollView
android:layout_
android:layout_
android:fillViewport="true"
app:layout_constraintTop_toBottomOf="@id/layout_2"
app:layout_constraintStart_toStartOf="parent">
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical">
<!-- some widgets-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pick"
android:layout_
android:layout_
android:layout_marginTop="10dp"
tools:listitem="@layout/inbound_item_detail_sector"
tools:visibility="visible" />
<!-- some widgets-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_buffer"
android:layout_
android:layout_
android:layout_marginTop="10dp"
tools:listitem="@layout/inbound_item_detail_sector"
tools:visibility="gone" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<Button
android:id="@+id/btn_1"
style="@style/button_bordered"
android:layout_
android:layout_
android:layout_marginHorizontal="5dp"
android:layout_weight="50" />
<Button
android:id="@+id/btn_2"
style="@style/button_bordered"
android:layout_
android:layout_
android:layout_marginHorizontal="5dp"
android:layout_weight="50"
android:text="@string/product_detail_btn_finish" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
但是,滚动不起作用。我做错了什么?
【问题讨论】:
【参考方案1】:尝试在 recyclerview for ex 中停止 nestedScrolling
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pick"
android:layout_
android:layout_
android:layout_marginTop="10dp"
android:nestedScrollingEnabled="false"
tools:listitem="@layout/inbound_item_detail_sector"
tools:visibility="visible" />
或来自代码rv_pick.setNestedScrollingEnabled(false);
如果只出现一个回收器而另一个将消失,我建议在 XML 中只使用一个并通过更改适配器从 java 代码控制它
【讨论】:
试过了,可惜没用。以上是关于ConstraintLayout 内的 NestedScrollView 不可滚动的主要内容,如果未能解决你的问题,请参考以下文章
Android - ConstraintLayout 内的 TextView 向右无限远 - 如何使用 ImageView 固定并有省略号
android.view.InflateException:膨胀类 androidx.constraintlayout.widget.ConstraintLayout 时出错