API 19设备使用FloatingActionButton出现异常边缘的解决咨询
这个问题我之前维护旧版本Android项目时也踩过坑,API 19(Android 4.4)本身不支持原生的elevation阴影特性,Design库是用模拟的阴影Drawable来实现视觉效果的,点击时的状态变化会重新触发阴影绘制,导致你说的边缘又出现的情况。给你几个亲测有效的解决思路:
方案一:彻底禁用FAB所有状态下的阴影模拟
核心是覆盖FAB的默认状态样式,同时禁用按下时的位移阴影:
- 先在
res/drawable目录下创建自定义背景文件fab_custom_background.xml,定义FAB在不同状态下的样式(完全去掉阴影):
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按下状态的背景 --> <item android:state_pressed="true"> <shape android:shape="oval"> <solid android:color="@color/your_accent_dark" /> <!-- 替换成你需要的按下深色 --> </shape> </item> <!-- 默认状态的背景 --> <item> <shape android:shape="oval"> <solid android:color="@color/your_accent_color" /> <!-- 替换成你的FAB主色 --> </shape> </item> </selector>
- 修改布局中的FAB代码,添加自定义背景并禁用elevation和按下位移:
<android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="90dp" android:layout_height="90dp" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:layout_marginBottom="8dp" android:background="@drawable/fab_custom_background" app:elevation="0dp" app:pressedTranslationZ="0dp" app:rippleColor="@color/your_ripple_color" /> <!-- 可选,设置点击波纹颜色 -->
注意:确保你的根布局已经声明了app命名空间:xmlns:app="http://schemas.android.com/apk/res-auto"
方案二:用自定义圆形View替代原生FAB
如果方案一还是有兼容问题,干脆绕开Design库的FAB,自己实现一个简单的圆形按钮,完全控制样式:
<ImageView android:id="@+id/custom_fab" android:layout_width="90dp" android:layout_height="90dp" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:background="@drawable/fab_custom_background" android:src="@drawable/ic_your_fab_icon" android:padding="16dp" android:clickable="true" android:focusable="true" />
然后在代码里给这个ImageView设置点击事件就可以了,这种方式完全不会有阴影相关的兼容问题,非常稳定。
方案三:调整Design库版本(可选)
如果你项目的依赖允许,可以尝试把Design库升级到28.0.0版本(这是最后一个支持API 19的稳定版本),部分旧版本的Design库在API 19上的FAB阴影模拟存在bug,升级后可能自动修复问题。不过升级前要注意检查其他依赖的兼容性,避免引入新问题。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

