提问人:gojic 提问时间:7/28/2020 更新时间:7/28/2020 访问量:2384
浮动操作按钮固定在 ScrollView 和 Constraintlayout 中
Floating Action Button fixed in ScrollView and Constraintlayout
问:
我有带有 ScrollView 的 xml 文件,该文件的子项为 Constraintlayout。我正在尝试的是使浮动操作按钮固定在屏幕上的同一位置,尽管滚动。
我试过和 .我还尝试将 FAB 放在 Constraintlayout 之外,但后来我遇到了一个错误,我的 ScrollView 不能有相乘子项。 android:layout_alignParentBottom="true" android:layout_alignParentEnd="true"
layout_anchorGravity="@+id/root_leyaut"
我的 XML:
`<layout 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">
<data>
<variable
name="montlyBudgeting"
type="com.nswd.successplan.ui.fragments.monthlyBudgetingFragment.MonthlyBudgetingViewModel" />
</data>
<androidx.core.widget.NestedScrollView
android:id="@+id/root_leyaut"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background"
tools:context=".ui.fragments.monthlyBudgetingFragment.MonthlyBudgetingFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:contentDescription="+"
layout_anchorGravity="@+id/root_leyaut"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:src="@drawable/ic_arrow_drop_down"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<------------------------rest of code-------------------->
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</layout>`
答:
3赞
einUsername
7/28/2020
#1
我不会使用 ScrollView 作为根布局。您可以使用第二个 ConstraintLayout,它将晶圆厂置于与 ScrollView 相同的“级别”。然后它不应该滚动,而应该留在角落里。以下代码应该可以工作,但我不得不注释掉你的一堆代码才能让它在我的电脑上运行......
<!--<layout 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">-->
<!-- <data>-->
<!-- <variable-->
<!-- name="montlyBudgeting"-->
<!-- type="com.nswd.successplan.ui.fragments.monthlyBudgetingFragment.MonthlyBudgetingViewModel" />-->
<!-- </data>-->
<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_height="match_parent"
android:layout_width="match_parent">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
layout_anchorGravity="@+id/root_leyaut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_gravity="end|bottom"
android:contentDescription="+"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.core.widget.NestedScrollView
android:id="@+id/root_leyaut"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:context=".ui.fragments.monthlyBudgetingFragment.MonthlyBudgetingFragment">
<!-- android:background="@color/background"-->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- android:src="@drawable/ic_arrow_drop_down"-->
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
<!--</layout>-->
1赞
AagitoEx
7/28/2020
#2
如果不想滚动 FAB,请放置内部约束布局。NestedScrollingView
<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_width="match_parent"
android:layout_height="wrap_content">
<androidx.core.widget.NestedScrollView
android:id="@+id/root_leyaut"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background">
<!-- Put your scrolling contents here, dont forget the constraints -->
</androidx.core.widget.NestedScrollView>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:contentDescription="+"
layout_anchorGravity="@+id/root_leyaut"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:src="@drawable/ic_arrow_drop_down"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
评论
0赞
einUsername
7/28/2020
请记住,如果他没有将 Layout 放入 NestedScrollView 中,并且它包含多个视图,他将再次收到相同的错误(ScrollView 只能承载一个直接子项)。
评论