Android中设置点击前后背景和颜色都变化的button

效果图

效果图

设置点击前后的背景的颜色变化

左边button未点击前(文件放在了res目录下的drawable文件夹下,文件名:logincode_left)

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 设置背景填充色 -->
    <!--<solid android:color="#5069ff" />-->
    <!-- 设置边框宽度为1dp,边框颜色 -->
    <stroke
        android:width="1dp"
        android:color="#F1F3FF" />
    <!-- 设置按钮圆角半径为25dp -->
    <corners android:bottomLeftRadius="25dp"
        android:topLeftRadius="25dp"/>

</shape>

点击后的文件(logincode_left_press)

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 设置背景填充色 -->
    <solid android:color="#5069ff" />
    <!-- 设置边框宽度为1dp,边框颜色 -->
    <stroke
        android:width="1dp"
        android:color="#F1F3FF" />
    <!-- 设置按钮圆角半径为25dp -->
    <corners android:bottomLeftRadius="25dp"
        android:topLeftRadius="25dp"/>

</shape>

设置点击前后的动作变化(logincode_left_selector)

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/logincode_left_press" android:state_enabled="false"/>
    <item android:drawable="@drawable/logincode_left" android:state_enabled="true"/>
</selector>

然后在button的background中引用drawable目录下的logincode_left_selector

设置点击前后文字颜色的变化

同样在drawable目录下新建一个button_selector_color文件,设置代码为

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/black"
        android:state_enabled="true" />
    <item android:color="@color/white"
        android:state_enabled="false" />
</selector>

然后将button的textColor属性设置为上面的文件

button点击事件的逻辑设置

我想实现的效果是,上面图中,点击左边button,左边button显示选中的效果,其他button不显示选中的效果。所以设计一下点击事件的逻辑。

button_left = findViewById(R.id.button_selector_left);
button_right = findViewById(R.id.button_selector_right);
button_middle = findViewById(R.id.button_selector_middle);
button_left.setOnClickListener(this);
button_middle.setOnClickListener(this);
button_right.setOnClickListener(this);

然后在onClick方法中实现:

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button_selector_left:
                setEnable(button_left);
                break;
            case R.id.button_selector_middle:
                setEnable(button_middle);
                break;
            case R.id.button_selector_right:
                setEnable(button_right);
                break;
        }
    }

其中

    private void setEnable(Button button) {
        List<Button> buttonList=new ArrayList<>();
        if (buttonList.size()==0){
            buttonList.add(button_left);
            buttonList.add(button_right);
            buttonList.add(button_middle);
        }
        for (int i = 0; i <buttonList.size() ; i++) {
            buttonList.get(i).setEnabled(true);
        }
        button.setEnabled(false);
    }

这样就实现上面显示的效果了。

参考文章:
(1):https://www.cnblogs.com/ldq2016/p/8866671.html
(2):https://blog.youkuaiyun.com/ymszzu/article/details/82756655?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
(3):https://blog.youkuaiyun.com/qq_39326574/article/details/100582919

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值