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

news/2024/12/22 9:00:21/

文章目录

    • 概要
    • 自定义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.ppmy.cn/news/946554.html

相关文章

免费获得minecraft账号,快来试试!!!

免费获得minecraft账号&#xff0c;快来试试 Nice! I just got a Minecraft gift code for FREE! :D https://freeminecraftgiftcode.net

【Minecraft】在Linux上架设我的世界Minecraft服务器(保姆级教程)

这篇文章也可以在我的博客中查看 准备工作 一台服务器 vps或者独立服务器都可以&#xff0c;有完全控制权就ok建议选择国内服务器&#xff0c;国外服务器连接时延较高&#xff0c;不适合做游戏服务器租用前应详细了解配置要求&#xff08;以下配置要求以同时在线5人左右的基友…

我的世界服务器皮肤显示mod,【回归了】McMySkin Mod - Minecraft单机联机皮肤显示Mod...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 McMySkin (Minecraft单机&联机皮肤显示Mod) 目前已恢复正常,并且将官方网站改版完毕,Mod与以前一样支持所有版本! ---------------------------------------------- 使用该Mod出现的任何问题请发送邮件至:WideSense.Plqws…

Minecraft 1.18.1、1.18.2模组开发 09.MC无双---动画生物实体(Geckolib Entity)

Minecraft是一款没有上限的游戏&#xff0c;你甚至可以在里面实现魂Like游戏中的酷炫动作:我的世界 类魂式战斗模组 今天我们尝试在模组中添加一个能够做各种动作的生物实体 1.首先&#xff0c;为了实现这些效果&#xff0c;我们需要首先使用到一个模组:geckolib(下载地址) 找…

怎么用python做我的世界皮肤_我的世界怎么换皮肤_我的世界皮肤怎么用_皮肤使用教程 - Minecraft中文分享站...

我的世界皮肤是游戏中重要的组成部分&#xff0c;通过皮肤可以让玩家在游戏中有着各种好看的外表&#xff0c;让玩家的角色能够在游戏中是独一无二的。 那么我的世界怎么换皮肤&#xff1f;我的世界皮肤怎么用呢&#xff1f; 这次“我的世界中文分享站”小编就来给大家分享下我…

Minecraft-服务器自定义礼包(EasyKitRel插件)

文章目录 前言相关介绍 一、配置config.yml-配置 二、指令[1]. 创建礼包[2]. 礼包时长[3]. 其他指令 三、权限四、玩家领取礼包的方法[1]. 指令[2]. 礼包木牌 前言 Minecraft沙盒游戏&#xff0c;它不单单可以让玩家游戏&#xff0c;玩家还能自己创建MC的服务器来供其他的玩家联…

服务器皮肤显示mod怎么用,如何配置皮肤 Mod · printempw/blessing-skin-server Wiki · GitHub...

Blessing Skin 只是一个皮肤站程序,仅仅是提供了上传、存储、检索、分享玩家皮肤的功能。想要在 Minecraft 游戏中显示您之前在皮肤站中上传的皮肤的话,您还需要「自定义皮肤 Mod」的帮助。 目前 Blessing Skin 支持的皮肤 Mod 有: UniSkinMod - Universal Skin Mod 具体配置…

Minecraft纯净服开服

Minecraft纯净服简介 Minecraft原版服务端Vanilla&#xff0c;又称香草服务端&#xff0c;由minecraft官方发布&#xff0c;仅呈现游戏内容以及多人联机的基础功能&#xff0c;无法添加插件&#xff0c;安装forge后可以添加Mod。 下面介绍如何搭建minecraft原版服务端&#x…