Android按钮点击时边框颜色未改变问题求助
解决Android按钮点击切换边框颜色无响应的问题
看起来你的按钮点击后没切换边框颜色,主要是这几个原因:你的Selector没有区分状态、按钮没绑定点击事件切换状态,还有初始化逻辑没正确关联状态和样式。咱们一步步来修复:
1. 合并并修复Selector资源
你现在有两个独立的Selector(gray_button和green_button),但它们都没有定义选中/点击状态,系统不知道什么时候切换样式。咱们把它们合并成一个能响应状态的Selector,比如button_border_selector.xml:
<?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="oval"> <stroke android:width="3dp" android:color="@color/green" /> <solid android:color="@color/white" /> <size android:width="37dp" android:height="40dp" /> </shape> </item> <!-- 默认未选中状态 --> <item> <shape android:shape="oval"> <stroke android:width="3dp" android:color="#646464" /> <solid android:color="@color/white" /> <size android:width="37dp" android:height="40dp" /> </shape> </item> </selector>
这样当按钮的selected状态为true时,边框会变成绿色,默认是灰色。
2. 给按钮添加点击事件切换状态
在CreateAlarm.java的onCreate方法里,给每个按钮绑定点击事件,切换它们的selected状态(这会触发Selector的样式变化)。如果你的CustomBorderButton没有重写状态相关逻辑,直接用普通Button也可以:
// 在初始化按钮之后添加点击事件 mbtn_Sun.setOnClickListener(v -> { // 切换选中状态 mbtn_Sun.setSelected(!mbtn_Sun.isSelected()); // 更新对应的变量 mSun = mbtn_Sun.isSelected() ? "Sun" : "Null"; }); // 其他六个按钮同理,复制上面的逻辑修改对应变量 mbtn_Mon.setOnClickListener(v -> { mbtn_Mon.setSelected(!mbtn_Mon.isSelected()); mMon = mbtn_Mon.isSelected() ? "Mon" : "Null"; }); mbtn_Tue.setOnClickListener(v -> { mbtn_Tue.setSelected(!mbtn_Tue.isSelected()); mTue = mbtn_Tue.isSelected() ? "Tue" : "Null"; }); mbtn_Wed.setOnClickListener(v -> { mbtn_Wed.setSelected(!mbtn_Wed.isSelected()); mWed = mbtn_Wed.isSelected() ? "Wed" : "Null"; }); mbtn_Thu.setOnClickListener(v -> { mbtn_Thu.setSelected(!mbtn_Thu.isSelected()); mThu = mbtn_Thu.isSelected() ? "Thu" : "Null"; }); mbtn_Fri.setOnClickListener(v -> { mbtn_Fri.setSelected(!mbtn_Fri.isSelected()); mFri = mbtn_Fri.isSelected() ? "Fri" : "Null"; }); mbtn_Sat.setOnClickListener(v -> { mbtn_Sat.setSelected(!mbtn_Sat.isSelected()); mSat = mbtn_Sat.isSelected() ? "Sat" : "Null"; });
3. 修正初始化时的状态设置
你之前用setEnabled(true),但我们需要的是设置selected状态来匹配Selector的样式,所以把初始化的代码改成:
if(mSun != null && mSun.contains("Sun")){ mbtn_Sun.setSelected(true); } else { mbtn_Sun.setSelected(false); } // 其他按钮同理修改 if(mMon != null && mMon.contains("Mon")){ mbtn_Mon.setSelected(true); } else { mbtn_Mon.setSelected(false); } // ... 剩下的Tue到Sat按钮都这么改
4. 确保按钮的背景设置为新的Selector
在你的布局文件(比如activity_create_alarm.xml)中,把每个按钮的android:background设置为我们刚创建的button_border_selector:
<Button android:id="@+id/mbtn_Sun" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button_border_selector" android:text="Sun" /> <!-- 其他按钮同样设置background -->
这样处理之后,点击按钮就会切换选中状态,Selector会自动切换边框颜色,初始化时也能正确显示之前保存的状态啦。
内容的提问来源于stack exchange,提问作者Nikson
相关产品推荐
相关产品推荐

