zoukankan      html  css  js  c++  java
  • Android CheckBox控件去除图标 样式改造

    有个UI需要实现下面这种效果,但我之前是使用的CheckBox,本着能改就改的原则,还是把CheckBox改造一份,终于是实现了图中的效果

    过程

    1.去除CheckBox的左侧图标

    CheckBox默认左侧会有个正方形的小框框,来展示勾选的状态,我们得先把这个去除了,去除的代码其实只需要在xml布局文件中,将button设置为null即可

    android:button="@null"

    代码:

    <CheckBox
    	android:layout_weight="1"
    	android:id="@+id/cb1"
    	android:layout_width="400dp"
    	android:layout_height="0dp"
    	android:background="@drawable/selector_checkbox"
    	android:button="@null"
    	android:text="需提供办事指南之外的申报材料" />
    

    2.设置背景

    这里选择使用Android中的selector作为背景,可以设置CheckBox选中和未选中的状态

    选中状态:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <corners android:radius="5dp"/>
        <solid android:color="#3791e0"/>
    </shape>
    

    默认状态:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <corners android:radius="5dp"/>
        <solid android:color="@color/white"/>
    </shape>
    

    selector:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_checked="true"  android:drawable="@drawable/shape_checkbox_checked"/>
    
        <item android:state_checked="false" android:drawable="@drawable/shape_checkbox_normal"/>
    </selector>
    

    设置背景:

    <CheckBox
    	android:layout_weight="1"
    	android:id="@+id/cb1"
    	android:layout_width="400dp"
    	android:layout_height="0dp"
    	android:button="@null"
    	android:background="@drawable/selector_checkbox"
    	android:text="需提供办事指南之外的申报材料" />
    

    3.设置文字颜色

    由于上面的背景选择并不能应用到文字上去,设置文字颜色我们只能通过代码来设置

    CheckBox提供了一个状态改变的监听器,通过这个监听器,我们可以动态对CheckBox的文字进行修改,代码如下:

    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    	@SuppressLint("ResourceAsColor")
    	@Override
    	public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
    		if (b) {
    			checkBox.setTextColor(getResColor(R.color.white));
    		} else {
    			checkBox.setTextColor(getResColor(R.color.black));
    		}
    	}
    });
    
    private int getResColor(int resColor) {
    	int color;
    	if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
    		color = getColor(resColor);
    	} else {
    		color = getResources().getColor(resColor);
    	}
    	return color;
    }
    

    PS:getResColor是封装的方法,主要用来获取颜色的二进制

    4.调整文字偏移

    调整文字偏移的话其实很简单,使用padding的属性即可,自己看着调整即可

    <CheckBox
    	android:layout_weight="1"
    	android:id="@+id/cb1"
    	android:layout_width="400dp"
    	android:layout_height="0dp"
    	android:paddingLeft="20dp"
    	android:paddingStart="30dp"
    	android:paddingBottom="10dp"
    	android:paddingTop="10dp"
    	android:layout_marginBottom="8dp"
    	android:background="@drawable/selector_checkbox"
    	android:button="@null"
    	android:text="需提供办事指南之外的申报材料" />
    

    代码示例

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <corners android:radius="5dp"/>
        <solid android:color="#3791e0"/>
    </shape>
    
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <corners android:radius="5dp"/>
        <solid android:color="@color/white"/>
    </shape>
    
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_checked="true"  android:drawable="@drawable/shape_checkbox_checked"/>
    
        <item android:state_checked="false" android:drawable="@drawable/shape_checkbox_normal"/>
    </selector>
    
    <CheckBox
    	android:layout_weight="1"
    	android:id="@+id/cb1"
    	android:layout_width="400dp"
    	android:layout_height="0dp"
    	android:paddingLeft="20dp"
    	android:paddingStart="30dp"
    	android:paddingBottom="10dp"
    	android:paddingTop="10dp"
    	android:layout_marginBottom="8dp"
    	android:background="@drawable/selector_checkbox"
    	android:button="@null"
    	android:text="需提供办事指南之外的申报材料" />
    

    提问之前,请先看提问须知 点击右侧图标发起提问 联系我 或者加入QQ群一起学习 Stars-One安卓学习交流群 TornadoFx学习交流群:1071184701
  • 相关阅读:
    关于oralce字符集问题(复制别人的,纯属自己学习)
    Linux下oracle11gR2系统安装到数据库建立配置及最后oracle的dmp文件导入一站式操作记录
    Linux下部署ASP.NET服务连接oracle遇到的问题记录
    前端金钱分转元,元转分精度问题解决
    vue-element的form表单显示图片
    vue页面刷新技巧--(v-if指令)以及vue动态设置css属性
    vue后端获取的数据无法进行双向数据绑定
    Vue实现勾选框全选和局部选择功能
    VUE/jQuery生成二维码扫描跳转地址
    uni-app之数据状态改动后页面不刷新踩坑
  • 原文地址:https://www.cnblogs.com/stars-one/p/14801523.html
Copyright © 2011-2022 走看看