Android布局:如何用Selector实现始终带边框且选中时背景变色?
问题原因
你这段代码的核心问题是选中状态的<item>里同时写了<color>和<shape>标签——Android的Selector规则里,每个<item>只能定义一个Drawable类型元素,当你同时放<color>(本质是ColorDrawable)和<shape>(ShapeDrawable)时,系统只会识别第一个元素,也就是<color>,所以选中状态下只有背景色,边框被完全覆盖了。
修正后的代码
把选中状态的背景色整合到<shape>的<solid>标签里,就能同时保留边框和背景色:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true"> <shape android:shape="rectangle"> <!-- 选中时的背景色 --> <solid android:color="@color/selected_color"/> <!-- 全局生效的黑色边框 --> <stroke android:width="1dip" android:color="@android:color/black"/> </shape> </item> <item android:state_selected="false"> <shape android:shape="rectangle"> <stroke android:width="1dip" android:color="@android:color/black"/> <!-- 未选中时设置透明背景,避免布局默认样式干扰 --> <solid android:color="@android:color/transparent"/> </shape> </item> </selector>
补充提示
- 未选中状态建议显式设置
<solid>为透明,防止布局自带的背景色影响边框显示 - 将这个Selector文件设置给目标布局的
android:background属性即可生效
内容的提问来源于stack exchange,提问作者Chris972
相关产品推荐
相关产品推荐

