Android 4.4中Fragment标签栏遮挡Floating Action Button求助
我遇到一个问题:把Floating Action Button放在Main Activity里,在Android 4.4设备上会被Fragment的标签栏遮挡,但Android 7.0设备显示正常,设置elevation属性也没用,请问怎么解决?
Android 4.4显示效果:
Android 7.0显示效果:
我的FAB的XML代码:
<android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:layout_marginRight="15dp" android:src="@drawable/create_icon" android:elevation="4dp" app:backgroundTint="@color/colorPrimary" app:fabSize="normal" />
解决方案
兄弟,这个问题我之前也碰到过,核心原因是Android 4.4(API 19)根本不支持elevation属性——这个特性是从Android 5.0(API 21)才引入的,所以你设置了也不会生效。给你几个亲测有效的解决办法:
调整XML布局顺序,让FAB在标签栏之后定义
Android的布局绘制是按XML里的顺序来的,后面的控件会覆盖前面的。如果你的标签栏布局代码写在FAB前面,那FAB自然会被挡住。把FAB的代码移到标签栏布局的下方,基本就能解决问题。在代码中调用
bringToFront()强制FAB置顶
如果布局顺序调整不方便,或者还是有问题,可以在MainActivity的onCreate方法里,或者Fragment切换完成的回调中,把FAB带到最上层:FloatingActionButton fab = findViewById(R.id.fab); fab.bringToFront();这个方法在低版本系统里非常靠谱,直接改变控件的绘制层级。
尝试使用兼容库的
app:elevation属性
把你当前的android:elevation="4dp"换成app:elevation="4dp",虽然Android 4.4本身不支持elevation,但design兼容库可能会做一些模拟处理,说不定能生效,不妨试试。检查RelativeLayout的布局约束
如果你用的是RelativeLayout,要确保FAB没有被layout_above之类的属性限制到标签栏的区域里,导致被遮挡。可以暂时去掉多余的布局约束,先让FAB正常显示再调整位置。
内容的提问来源于stack exchange,提问作者Nick.K

