Android悬浮按钮无法固定位置问题咨询
Hey there! I get exactly what you're going for—having those two floating action buttons (FABs) sit at the bottom of the screen when there's no data to show, and right after your list records when content exists. Let's adjust your layout to make that behavior work smoothly.
Option 1: Use LinearLayout (Simple & Straightforward)
This approach uses a vertical LinearLayout to stack your list and FAB container. The list will expand to fill available space when it has content, and shrink down when empty, pushing the FABs to the bottom automatically.
<?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" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- Your list view (replace with RecyclerView/ListView/ScrollView as needed) --> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recordList" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <!-- Container for your two Floating Action Buttons --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="end" android:padding="16dp"> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fabFirst" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="16dp" app:srcCompat="@drawable/your_first_fab_icon" /> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fabSecond" android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/your_second_fab_icon" /> </LinearLayout> </LinearLayout>
How it works: The layout_weight="1" on the list view tells it to occupy all remaining vertical space when it has content. When the list is empty, it collapses to minimal height, and the FAB container shifts straight to the bottom of the screen.
Option 2: Use ConstraintLayout (More Flexible)
If you prefer ConstraintLayout for finer layout control, this setup links the list and FAB container so they dynamically adjust their positions based on content:
<?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_width="match_parent" android:layout_height="match_parent"> <!-- Your list view --> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recordList" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@id/fabContainer" /> <!-- FAB container --> <LinearLayout android:id="@+id/fabContainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="end" android:padding="16dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/recordList"> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fabFirst" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="16dp" app:srcCompat="@drawable/your_first_fab_icon" /> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fabSecond" android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/your_second_fab_icon" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
How it works: The list's bottom is constrained to the FAB container's top, and the FAB container's top is linked to the list's bottom. When the list is empty, the FAB container sticks to the parent's bottom. When the list has content, it pushes the FAB container down to sit directly after the last list item.
Quick Tip
This logic works for any content view (RecyclerView, ListView, even a ScrollView with static content). Just make sure your content view uses wrap_content for height so it only takes up space when it has data to display.
内容的提问来源于stack exchange,提问作者pravin maske




