Android 自定义SwitchPreference

news/2024/5/17 8:23:31

1. 为SwitchPreference 添加背景:custom_preference_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item><shape android:shape="rectangle" ><gradient android:startColor="@color/white" android:endColor="@color/white" android:angle="90"/><corners android:radius="8dp"/></shape></item>
</selector>

2. 自定义 CustomSwitchPreference 继承自 witchPreference

public class CustomSwitchPreference extends SwitchPreference {public CustomSwitchPreference(Context context, AttributeSet attrs) {super(context, attrs);}public CustomSwitchPreference(Context context) {super(context);}//
....
//
}

3. 重载  onBindViewHolder, 实现自定义的效果, 如:设置背景、添加外边距、设置内边距、修改文字的颜色和字体等等:

    @Overridepublic void onBindViewHolder(PreferenceViewHolder holder) {super.onBindViewHolder(holder);//设置背景holder.itemView.setBackgroundResource(R.drawable.custom_preference_background);//设置内边距holder.itemView.setPadding(DensityUtils.dp2px(getContext(),20),DensityUtils.dp2px(getContext(),2),DensityUtils.dp2px(getContext(),20),DensityUtils.dp2px(getContext(),2));//设置外边距ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)   holder.itemView.getLayoutParams();int textSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 18, getContext().getResources().getDisplayMetrics());params.topMargin = DensityUtils.dp2px(getContext(),5);params.bottomMargin = DensityUtils.dp2px(getContext(),5);params.leftMargin = DensityUtils.dp2px(getContext(),20);params.rightMargin = DensityUtils.dp2px(getContext(),20);holder.itemView.setLayoutParams(params);TextView titleView = holder.itemView.findViewById(android.R.id.title);titleView.setTextColor(Color.BLACK); // 这里设置为红色,你可以根据需要设置其他颜色TextView summaryView = holder.itemView.findViewById(android.R.id.summary);summaryView.setTextColor(Color.BLACK); // 设置为黑色}

完整代码如下:

public class CustomSwitchPreference extends SwitchPreference {public CustomSwitchPreference(Context context, AttributeSet attrs) {super(context, attrs);}public CustomSwitchPreference(Context context) {super(context);}@Overridepublic void onBindViewHolder(PreferenceViewHolder holder) {super.onBindViewHolder(holder);holder.itemView.setBackgroundResource(R.drawable.custom_preference_background);holder.itemView.setPadding(DensityUtils.dp2px(getContext(),20),DensityUtils.dp2px(getContext(),2),DensityUtils.dp2px(getContext(),20),DensityUtils.dp2px(getContext(),2));ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)   holder.itemView.getLayoutParams();int textSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 18, getContext().getResources().getDisplayMetrics());params.topMargin = DensityUtils.dp2px(getContext(),5);params.bottomMargin = DensityUtils.dp2px(getContext(),5);params.leftMargin = DensityUtils.dp2px(getContext(),20);params.rightMargin = DensityUtils.dp2px(getContext(),20);holder.itemView.setLayoutParams(params);TextView titleView = holder.itemView.findViewById(android.R.id.title);titleView.setTextColor(Color.BLACK); // 这里设置为红色,你可以根据需要设置其他颜色TextView summaryView = holder.itemView.findViewById(android.R.id.summary);summaryView.setTextColor(Color.BLACK); // 设置为蓝色}
}

用法:

    <com.tetras.sensechat.wedgit.CustomSwitchPreferenceapp:defaultValue="true"app:iconSpaceReserved="false"app:key="key_continuous_switch"app:title="@string/text_continuous_switch" />

效果如图:


http://www.mrgr.cn/p/30618464

相关文章

【每日刷题】Day16

【每日刷题】Day16 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 2. 160. 相交链表 - 力扣&…

ruoyi框架修改

修改主题色topleft布局改为自定义topleft布局涉及到的文件 src/settings.js,src/layout/index.vue ,src/components/TopNav ,src/layout/components/Navbar.vue 避免修改原文件,将src/components/TopNav ,src/layout/components/Navbar.vue 同级目录下复制一份 分别重命名…

服务器之HP服务器带外口登录

前言HP服务器的管理口需要通过dhcp为其分配一个IP,通过笔记本配置同网段的IP进行连接。一、下载TFPTD软件-DHCP服务器(为笔记本和服务器dhcp分配IP地址)二、笔记本登录管理口

论文笔记:(INTHE)WILDCHAT:570K CHATGPT INTERACTION LOGS IN THE WILD

iclr 2024 spotlight reviewer 评分 5668 1 intro 由大型语言模型驱动的对话代理&#xff08;ChatGPT&#xff0c;Claude 2&#xff0c;Bard&#xff0c;Bing Chat&#xff09; 他们的开发流程通常包括三个主要阶段 预训练语言模型在被称为“指令调优”数据集上进行微调&…

2024/4/15考试题解

就是一篇普通的考试题解目录成绩报告A.排座位题目内容思路代码B.梦中的学校题目内容思路代码C.激突冲击题目内容思路代码D.奖学金题目内容思路代码 成绩报告T1说是快排,其实跟快排没有任何关系,就是单纯考了个语法。T2不会推式子,但是输出1有20分。T3不会差分约束(打拓扑排…

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展&#xff0c;为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性&#xff0c;与多种 Python 解释器协同工作&#xff0c;轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…

【机器学习300问】71、神经网络中前向传播和反向传播是什么?

我之前写了一篇有关计算图如何帮助人们理解反向传播的文章&#xff0c;那为什么我还要写这篇文章呢&#xff1f;是因为我又学习了一个新的方法来可视化前向传播和反向传播&#xff0c;我想把两种方法总结在一起&#xff0c;方便我自己后续的复习。对了顺便附上往期文章的链接方…

Go--goland下载安装

下载地址:https://www.jetbrains.com/go/download/other.html 然后进行安装,将可选那一步全勾选 运行程序好,要设置激活码或者选择登陆账户,不然不可用,激活码可以网上找免费的 新建项目 将语言设置成中文,下载chinses插件,重新运行

Bounce 弹飞绵羊

某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装 置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则…

element的表格页面宽度变化问题 (防抖函数)

//表格问题(防抖函数) const debounce = (fn, delay) => { let timer = null; return function() { let context = this; let args = arguments; clearTimeout(timer); timer = setTimeout(function() { fn.apply(context, args); }, delay); } }const _R…

基于Django(python+sql)的校园二手交易系统设计与实现(完整程序+开题报告+论文)

随着互联网的迅猛发展&#xff0c;校园内的二手交易市场也逐渐呈现出蓬勃的发展态势。学生们在校园生活中会产生大量的闲置物品&#xff0c;而其他学生也有可能需要这些物品。本论文研究了校园二手交易系统的需求分析、系统实现和测试三个部分&#xff0c;旨在提高校园二手交易…

快速删除node_modules依赖包的命令rimraf

1、安装rimraf npm install -g rimraf 2、使用命令删除node_modules rimraf node_modules *** window系统&#xff0c;使用命令很快就删除node_modules ***

vim多行注释与取消

Step 1:在命令行模式下,将光标固定在第一列,按Ctrl+V快捷键进入VB可视化模式: Step 2:上下移动光标,选择你想要注释的行: Step 3: 选择好之后,按**大写的**I键进入 insert 模式,输入注释符“//”或“#”: 注意这里一定要按大写的I键,小写的是不行的。 Step 4:最…

Slf4j+Log4j简单使用

Slf4jLog4j简单使用 文章目录 Slf4jLog4j简单使用一、引入依赖二、配置 log4j2.xml2.1 配置结构2.2 配置文件 三、使用四、使用MDC完成日志ID4.1 程序入口处4.2 配置文件配置打印4.3 多线程日志ID传递配置 五. 官网 一、引入依赖 <dependencies><dependency><g…

MBR30100PT-ASEMI肖特基二极管MBR30100PT

MBR30100PT-ASEMI肖特基二极管MBR30100PT编辑:ll MBR30100PT-ASEMI肖特基二极管MBR30100PT 型号:MBR30100PT 品牌:ASEMI 封装:TO-247 最大平均正向电流(IF):30A 最大循环峰值反向电压(VRRM):100V 最大正向电压(VF):0.54V~0.92V 工作温度:-40C~170C 反向恢复时间:…

脑图系列-操作系统

打开电源操作系统做了什么? 加载BIOS 当计算机插上电源时,计算机主板的BIOS开始工作。BIOS会进行POST(Power-On Self-Test)自检,检测计算机的硬件是否正常,包括处理器、内存、硬盘、显卡、网卡等设备。如果有问题,则会在屏幕上显示错误信息。 加载引导程序 当自检完成后…

别让商业机密跑了:企业如何锁紧数据大门

Facebook 用户数据泄露:2018年,Cambridge Analytica公司非法获取了8700万Facebook用户的个人数据,并用于政治广告定向;Capital One 金融公司泄密:2019年,美国银行Capital One遭到黑客攻击,导致106万个加拿大用户的个人信息以及1亿名美国用户的信息泄露。这些事件凸显了数…

WPF中文网随笔(2)

常用布局控件Panel其实是一个抽象类,不可以实例化,WPF所有的布局控件都从Panel继承而来 public abstract class Panel : FrameworkElement, IAddChild 它继承于FrameworkElement基类和IAddChild接口。所以,所有 Panel 元素都支持 FrameworkElement 定义的基本大小调整和定位…

一次配置Docker环境的完整记录

一次配置Docker环境的完整记录 Docker环境搭建报错与解决报错一报错二报错三 Docker环境搭建 本节介绍了一次配置docker环境的完整记录&#xff1a; 编写Dockerfile文件&#xff1a; FROM pytorch/pytorch:1.10.0-cuda11.3-cudnn8-develRUN rm /etc/apt/sources.list.d/cuda.l…

Avalonia实现Visual Studio风格标题栏的方法

Visual Studio风格的标题栏可以更节省屏幕空间,个人认为其实比Ribbonbar和传统菜单都要更先进一些,更紧凑,利用效率更高。我在AvaloniaSamples项目中添加了一个这种Demo,展示了如何在Avalonia 11中分别实现经典风格、Macos风格和Visual Studio风格的标题栏:关键点就在于Ma…