Android AppCompatButton设置背景图片后出现阴影问题求助
问题分析
AppCompatButton默认继承Material Design按钮样式,自带elevation(阴影)和点击时的阴影收缩动画(由stateListAnimator控制),即便设置自定义背景图,这些默认特性仍会保留,从而出现你遇到的阴影和点击收缩效果。
解决方案
可以通过以下几种方式彻底去除阴影及相关动画:
1. 直接在XML中禁用阴影和动画
修改按钮的XML代码,添加关键属性:
<androidx.appcompat.widget.AppCompatButton android:id="@+id/btn_atras" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:background="@drawable/atras" android:elevation="0dp" app:elevation="0dp" android:stateListAnimator="@null" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
android:elevation="0dp"&app:elevation="0dp":同时设置系统和AppCompat的阴影高度为0,彻底移除阴影android:stateListAnimator="@null":禁用按钮点击时的阴影收缩动画
2. 使用无边界按钮样式
直接套用AppCompat提供的无阴影无边框样式,适配自定义背景的按钮场景:
<androidx.appcompat.widget.AppCompatButton android:id="@+id/btn_atras" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:background="@drawable/atras" style="@style/Widget.AppCompat.Button.Borderless" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
该样式默认移除阴影和边框,同时保留点击波纹效果;若不需要波纹,可额外添加android:foreground="@null"。
3. 自定义全局按钮样式
如果多个按钮都需要此效果,可在styles.xml中定义通用样式:
<style name="CustomButtonNoShadow" parent="Widget.AppCompat.Button"> <item name="android:elevation">0dp</item> <item name="app:elevation">0dp</item> <item name="android:stateListAnimator">@null</item> <item name="android:background">@null</item> <!-- 自定义背景可在布局中单独设置 --> </style>
之后在布局中给按钮设置style="@style/CustomButtonNoShadow"即可。
额外检查
确认你的@drawable/atras背景图本身是否带有阴影效果,如果是,需要修改图片资源去除阴影。
内容的提问来源于stack exchange,提问作者Carlos Serrano
相关产品推荐
相关产品推荐

