Android 自定义CheckBox样式,设置切换背景图,类似于RadioButton

文章目录

    • 概要
    • 自定义CheckBoX
    • 资源文件如下
    • 使用方法
    • 实现效果

概要

目前要实现类似于Radiobutton选择按钮,如果只有一个RadioButton,就不能和radio Group连用,导致选择没办法取消,如果要实现只能代码中进行操作,过于繁琐。所以自己写了一个定义CheckBox样式,实现的效果和RadioBUtton样式一样,不过能够实现选择和取消,代码中直接实现监听即可,这样就方便使用了

自定义CheckBoX

具体实现代码如下:

public class CheckButton extends CheckBox {private Drawable drawableLeft;private int scaleWidth; //dp值private int scaleHeight;public CheckButton(Context context) {super(context);}public CheckButton(Context context, AttributeSet attrs) {super(context, attrs);init(context,attrs);}public CheckButton(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context, attrs);}public void init(Context context, AttributeSet attrs) {TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ImageTextButton);drawableLeft = typedArray.getDrawable(R.styleable.ImageTextButton_leftDrawable);scaleWidth = typedArray.getDimensionPixelOffset(R.styleable.ImageTextButton_drawableWidth, 20);scaleHeight = typedArray.getDimensionPixelOffset(R.styleable.ImageTextButton_drawableHeight, 20);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);if (drawableLeft != null) {drawableLeft.setBounds(0, 0,scaleWidth, scaleHeight);}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);this.setCompoundDrawables(drawableLeft, null, null, null);}/*** 设置左侧图片并重绘* @param drawableLeft*/public void setDrawableLeft(Drawable drawableLeft) {this.drawableLeft = drawableLeft;invalidate();}/*** 设置左侧图片并重绘* @param drawableLeftRes*/public void setDrawableLeft(int drawableLeftRes) {this.drawableLeft = getContext().getResources().getDrawable(drawableLeftRes);invalidate();}
}

资源文件如下

放在res目录下的styles中

   <!-- ImageTextButton attrs--><attr name="leftDrawable" format="reference"/><attr name="drawableWidth" format="dimension"/><attr name="drawableHeight" format="dimension"/><declare-styleable name="ImageTextButton"><attr name="leftDrawable"/><attr name="drawableWidth"/><attr name="drawableHeight"/></declare-styleable>

使用方法

直接在xml布局中引用CheckButton即可,代码如下

<com.CheckButtonandroid:id="@+id/tz_checkbox1"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="15sp"android:drawablePadding="5dp"app:drawableWidth="20dp"app:drawableHeight="20dp"android:button="@null"android:text="我是自定义CheckBox"app:leftDrawable="@drawable/radion_select"/>

实现效果

效果图

写到这里就大功告成!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28925.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIA|详解Telnet协议

一、前言 今天翻到了之前写的Telnet协议的实验&#xff0c;由于该篇文章创作于开始写作的初期&#xff0c;文章结构简单、布局潦草&#xff0c;但实验内容是完整的&#xff0c;因此本篇文章将对Telnet技术进行详解&#xff0c;希望能够对大家提供帮助。在本文中&#xff0c;将从…

Redis高级篇(一)

分布式缓存 -- 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; 1.Redis持久化 Redis有两种持久化方案&#xff1a;RDB持久化、AOF持久化 1.1.RDB持久化 什么是RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&am…

【笔记MD】

https://editor.csdn.net/md/?not_checkout1&articleId131798584 这里写自定义目录标题 https://editor.csdn.net/md/?not_checkout1&articleId131798584欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入…

开发工具篇第二十六讲:使用IDEA进行本地调试和远程调试

开发工具篇第二十六讲&#xff1a;使用IDEA进行本地调试和远程调试 Debug用来追踪代码的运行流程&#xff0c;通常在程序运行过程中出现异常&#xff0c;启用Debug模式可以分析定位异常发生的位置&#xff0c;以及在运行过程中参数的变化&#xff1b;并且在实际的排错过程中&am…

Cesium-源码打包1.106

在有Cesium源码打包的需求下&#xff0c;可以这样进行&#xff0c; 1.106的源码目录结构如下&#xff1a; 1.在下载的源码目录中运行 npm install 出现node_modules文件夹&#xff0c;然后我们就可以根据需求去修改源码&#xff0c;本文用的版本是1.106&#xff0c; packag…

K8s集群架构组件(3)

&#xff08;2&#xff09;node组件 kubelet&#xff1a;master排到node节点代表&#xff0c;管理本机容器 kube-proxy&#xff1a;提供网络代理&#xff0c;负载均衡等操作

linux 安装pytorch3d的坑

事实上&#xff0c;只要按照官方文档的说明就可以完美安装。其中坑的地方在于conda的管理可能会导致下载的版本不符合你的要求&#xff08;例如下载成了cpu版本、下载的cuda版本&#xff09;而同样尝试使用源码编译以及其他方式下载库都会导致同样的问题&#xff0c;这里主要的…

前端工程中的设计模式应用

本文旨在系统性介绍一下23种设计模式&#xff0c;给出通俗易懂的案例、结构图及代码示例&#xff0c;这也是我自身学习理解的过程。或许其中的几种设计模式写的并不是很清晰明了易懂&#xff0c;更详细的可根据提到的参考文献进行深入学习。 什么是设计模式 设计模式这个概念是…

kafka接收外部接口的数据,并实现转发

目录 一、什么是kafka 二、kafka接收外部接口数据 三、kafka收到数据后转发 四、kafka总结 一、什么是kafka Kafka是一种分布式流式处理平台&#xff0c;最初由LinkedIn开发。它设计用于高吞吐量、低延迟的数据处理&#xff0c;能够处理大规模的实时数据流。Kafka采用发布…

非线性弹簧摆的仿真(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

OpenCv之图像轮廓(二)

目录 一、多边形逼近 二、凸包 三、最小外接矩形与最大外接矩形 一、多边形逼近 参照函数: approxPolyDP就是以多边形去逼近轮廓&#xff0c;采用的是Douglas-Peucker算法(DP) DP算法原理比较简单&#xff0c;核心就是不断找多边形最远的点加入形成新的多边形&#xff0c;直…

数据结构-栈和队列

栈和队列 栈栈的基本概念栈的结构初始化栈销毁栈压栈出栈栈中元素的个数查找栈顶的元素压栈和出栈的一个演示全部代码Stack.hStack.cTest.c 队列队列的基本概念节点和队列的定义队列的初始化销毁队列入队出队计算队列中元素的个数判断队列是否为空返回队列中的队头元素返回队列…