如何让MainActivity中的Floating Action Button始终显示在界面顶层?
嘿,这个问题我碰到过好几次啦!FAB被RecyclerView列表挡住,本质是**布局层级(z轴顺序)**的问题,咱们可以用这两种简单方法解决:
方法一:调整XML中View的声明顺序
在ConstraintLayout(以及大多数ViewGroup)里,View的绘制顺序是按照XML里的声明顺序来的——后写的View会被绘制在前面。所以只要把你的FAB代码移到RecyclerView(或者Fragment的容器View)的后面就行。
举个修改后的布局示例:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.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"> <!-- 先放RecyclerView或者Fragment容器 --> <androidx.recyclerview.widget.RecyclerView android:id="@+id/blog_recycler" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> <!-- 再放FAB,这样它就会绘制在RecyclerView上层 --> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_add" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_margin="16dp"/> </android.support.constraint.ConstraintLayout>
方法二:设置更高的Elevation(Z轴高度)
如果不想调整布局顺序,也可以通过elevation属性直接指定FAB的Z轴高度,让它比RecyclerView(或列表项)更高。
给FAB添加更高的elevation值:
<com.google.android.material.floatingactionbutton.FloatingActionButton ... android:elevation="8dp" app:pressedTranslationZ="12dp"/> <!-- 可选:按下时的Z轴高度 -->
同时确保RecyclerView的elevation低于FAB(默认RecyclerView的elevation是0dp,一般不用改,但如果列表项有自定义elevation,也要保证FAB的更高)。
这两种方法都能轻松解决遮挡问题,个人更推荐第一种,因为符合布局的自然绘制逻辑,代码也更简洁~
内容的提问来源于stack exchange,提问作者Redyeti
相关产品推荐
相关产品推荐

