Android 点击按钮后改变颜色且保持,再点击别的之后颜色改变

搞这个搞了好几次了,终于寻求到了答案

搞了好几次了,用Pressed、selected属性都搞了搞不行,最终在大神博客中解决,万分感谢!!
转自大神博客ovo

啥效果呢?

在这里插入图片描述
如图,点击其中一个按钮时,切换状态,点哪个哪个为红色,就这样的的效果

这效果怎么玩?

  1. 先在drawable文件中建xml样式文件,代码如下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_pressed" android:state_enabled="false" /><!-- 点击时的颜色 --> 
    <item android:drawable="@drawable/button_normal" android:state_enabled="true" /><!-- 未点击时的颜色 --> 
</selector>
  1. 定义这两个button_pressed(点击)和button_normal(为点击)时的样式

button_pressed.xml (/res/drawable/button_pressed.xml)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@android:color/holo_red_dark" />
</shape>

button_normal.xml (/res/drawable/button_normal.xml)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#226022" />
</shape>
  1. 然后将样式添加到按钮中【android:background="@drawable/button_box"】
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".OtherActivity">
    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="87dp"
        android:background="@drawable/button_box"
        android:text="数据上传"
        android:textSize="16sp" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="87dp"
        android:background="@drawable/button_box"
        android:text="数据上传"
        android:textSize="16sp" />
    <Button
        android:id="@+id/btn3"
        android:layout_width="wrap_content"
        android:layout_height="87dp"
        android:background="@drawable/button_box"
        android:text="数据上传"
        android:textSize="16sp" />

</LinearLayout>
  1. 重点来了,在activity中通过设置button的enable属性来达到控制样式的目的
public class OtherActivity extends AppCompatActivity implements View.OnClickListener {

    private Button mbtn1;
    private Button mbtn2;
    private Button mbtn3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        mbtn1 = findViewById(R.id.btn1);
        mbtn2 = findViewById(R.id.btn2);
        mbtn3 = findViewById(R.id.btn3);

        mbtn1.setOnClickListener(this);
        mbtn2.setOnClickListener(this);
        mbtn3.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:
                setEnable(mbtn1);
                break;
            case R.id.btn2:
                setEnable(mbtn2);
                break;
            case R.id.btn3:
                setEnable(mbtn3);
                break;
        }
    }

    private void setEnable(Button btn) {
        List<Button> buttonList = new ArrayList<>();
        if (buttonList.size() == 0) {
            buttonList.add(mbtn1);
            buttonList.add(mbtn2);
            buttonList.add(mbtn3);
        }
        for (int i = 0; i < buttonList.size(); i++) {
            buttonList.get(i).setEnabled(true);
        }
        btn.setEnabled(false);
    }
}

然后就可以了,如果还没解决,评论留言都可以,一直在线 ovo

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值