NestedScrollView/ ScrollView 在某些布局包含到 ScrollView 的子项时不滚动
Posted
技术标签:
【中文标题】NestedScrollView/ ScrollView 在某些布局包含到 ScrollView 的子项时不滚动【英文标题】:NestedScrollView/ ScrollView is not scrolling when some layout are included to the child of ScrollView 【发布时间】:2020-07-07 06:36:55 【问题描述】:androidx.core.widget.NestedScrollView
LinearLayout
androidx.constraintlayout.widget.ConstraintLayout
TextView
CheckBox
CheckBox
CheckBox
CheckBox
CheckBox
CheckBox
CheckBox
CheckBox
CheckBox
CheckBox
TextView
include
include
include
上面是我的 XML 的结构,当我包含布局时,滚动视图不起作用。
最初包含的布局是 Visibility GONE 并且它们在选中复选框时可见。 复选框不足以使屏幕可滚动,但一旦包含的布局可见,scrollView 应该滚动。但是布局在底部剪切并且不滚动。
完整的 XML:
<?xml version="1.0" encoding="utf-8"?>
<data>
<variable
name="annualRiskAssessmentVM"
type="com.cmm_android.forms.risk_assessment.AnnualRiskAssessmentVM" />
<variable
name="fragment"
type="com.cmm_android.forms.risk_assessment.AnnualRiskAssessmentFrag4" />
</data>
<androidx.core.widget.NestedScrollView
android:layout_
android:layout_
android:fillViewport="true">
<LinearLayout
android:layout_
android:layout_>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_
android:padding="@dimen/_16sdp">
<TextView
android:id="@+id/tv2"
style="@style/RegularBlack"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_8sdp"
android:text="My support will include assistance with :"
android:textAlignment="viewStart"
app:layout_constraintTop_toBottomOf="@+id/tv1" />
<CheckBox
android:id="@+id/cbMedication"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_8sdp"
android:text="Medication"
app:layout_constraintTop_toBottomOf="@id/tv2" />
<CheckBox
android:id="@+id/cbPersonalCare"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_4sdp"
android:text="Personal Care"
app:layout_constraintTop_toBottomOf="@id/cbMedication" />
<CheckBox
android:id="@+id/cbNutrition"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_4sdp"
android:text="Nutrition"
app:layout_constraintTop_toBottomOf="@id/cbPersonalCare" />
<CheckBox
android:id="@+id/cbMoneyManagement"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_4sdp"
android:text="Money Management"
app:layout_constraintTop_toBottomOf="@id/cbNutrition" />
<CheckBox
android:id="@+id/cbShopping"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_4sdp"
android:text="Shopping"
app:layout_constraintTop_toBottomOf="@id/cbMoneyManagement" />
<CheckBox
android:id="@+id/cbSocialActivity"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_4sdp"
android:text="Social activities or accessing the community"
app:layout_constraintTop_toBottomOf="@id/cbShopping" />
<CheckBox
android:id="@+id/cbCompanionship"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_4sdp"
android:text="Companionship (sitter service)"
app:layout_constraintTop_toBottomOf="@id/cbSocialActivity" />
<CheckBox
android:id="@+id/cbWellbeing"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_4sdp"
android:text="Wellbeing checks"
app:layout_constraintTop_toBottomOf="@id/cbCompanionship" />
<CheckBox
android:id="@+id/cbDomestic"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_4sdp"
android:text="Domestic"
app:layout_constraintTop_toBottomOf="@id/cbWellbeing" />
<CheckBox
android:id="@+id/cbOther"
style="@style/CheckBox"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_4sdp"
android:text="Other"
app:layout_constraintTop_toBottomOf="@id/cbDomestic" />
<TextView
android:id="@+id/tv3"
style="@style/SmallBlack"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_8sdp"
android:text="Now complete additional relevant sections below"
app:layout_constraintTop_toBottomOf="@id/cbOther" />
<include
android:id="@+id/layout_medication"
layout="@layout/layout_medication"
android:layout_
android:layout_
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv3" />
<include
android:id="@+id/layout_personal_care"
layout="@layout/layout_personal_care"
android:layout_
android:layout_
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layout_medication" />
<include
android:id="@+id/layout_nutrition"
layout="@layout/layout_nutrition"
android:layout_
android:layout_
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layout_personal_care" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
我浏览了许多关于 SO 的帖子,但没有一篇与包含布局的可见性有关。
【问题讨论】:
【参考方案1】:所以,这是我花了一整天才弄明白的最愚蠢的错误。
我的约束布局的第一个孩子被限制在 tv1 的底部,它甚至不存在于整个布局中。 (复制粘贴错误)
<TextView
android:id="@+id/tv2"
style="@style/RegularBlack"
android:layout_
android:layout_
android:layout_marginTop="@dimen/_8sdp"
android:text="My support will include assistance with :"
android:textAlignment="viewStart"
app:layout_constraintTop_toBottomOf="@+id/tv1" />
改成
app:layout_constraintTop_toTopOf="parent"
滚动开始工作。 :)
【讨论】:
以上是关于NestedScrollView/ ScrollView 在某些布局包含到 ScrollView 的子项时不滚动的主要内容,如果未能解决你的问题,请参考以下文章
当在nestedscrollview的recyclerview中将项目拖出可见空间时-nestedscrollView不滚动
从 NestedScrollView 中删除 OnScrollChangeListener
Android之解决NestedScrollView嵌套RecyclerView部分手机返回到这个页面Recyclerview顶部,而不是页面NestedScrollView顶部
Android之解决NestedScrollView嵌套RecyclerView部分手机返回到这个页面Recyclerview顶部,而不是页面NestedScrollView顶部