View 自定义 - 属性 xml
一、概念
在 xml 中为控件设置的属性。自定义属性名称如果使用系统已定义的,例如 textSize 会在编译时报错。
| 格式类型 | 定义/使用 |
| string 字符串 | <attr name = "myContent" format = "color" /> android:myContent = "Hello Word!" |
| color 颜色 | <attr name = "myTextColor" format = "color" /> android:myTextColor = "#00FF00" |
| dimension 尺寸 | <attr name = "myTextSize" format = "dimension" /> android:myTextSize = "12.sp" |
| reference 资源 | <attr name = "myBackground" format = "reference" /> android:myBackground = "@drawable/图片ID" |
| boolean 布尔 | <attr name = "myEnable" format = "boolean" /> android:myEnable = "true" |
| float 浮点 | <attr name = "myAlpha" format = "float" /> android:myAlpha = "0.5F" |
| integer 整型 | <attr name = "myMaxLines" format = "integer" /> android:myMaxLines = "3" |
| fraction 百分比 | <attr name = "myOffset" format = "fraction" /> android:myOffset = "10%" |
| enum 枚举 | <attr name = "myOrientation"> <enum name = "horizontal" value="0" /> <enum name = "vertical" value="1" /> </attr> android:myOrientation = "vertical" |
| flag 位运算 | 位运算类型的属性在使用的过程中可以使用多个值 <attr name = "myGravity" /> <flag nema="top" value="0x01"> <flag nema="left" value="0x02"> <flag nema="center_vertical" value="0x02"> </attr> android:myGravity = "top|left" |
| 混合类型 | 属性定义时可以指定多种类型值 <attr name = "myBackground" format = "reference|color" /> android:myBackground = "@drawable/图片ID" android:myBackground = "#00FF00" |
二、自定义步骤
2.1 创建资源文件(属性声明)
右键 values 目录 -> New File文件 -> 一般取名attrs.xml。
<resources><!--name使用自定义View的名称--><declare-styleable name="MyView"><!--name属性名称,format格式--><attr name="myText" format="string" /><attr name="myTextColor" format="color" /><attr name="myTextSize" format="dimension" /><attr name="myMaxLength" format="integer" /><attr name="myBackground" format="reference|color" /><!--枚举--><attr name="myInputType"><enum name="number" value="1"/><enum name="text" value="2"/></attr></declare-styleable>
</resources>
2.2 构造函数中配置
| constructor(context: Context?) : super(context) 重写一个参数的构造函数,使用场景:代码 new 创建实例的时候调用。 |
| constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) 重写两个参数的构造函数,使用场景:xml中使用时调用(xml转java代码的时候反射)。 |
| constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) 重写三个参数的构造函数,使用场景:使用主题Style的时候调用。 |
class MyView : View {private var text: String? = nullprivate var textSize: Int? = nullprivate var textColor: Int? = nullprivate var maxLength: Int? = nullprivate var background: Int? = nullprivate var inputType: Int? = null//改成this调用2个参数的构造constructor(context: Context?) : this(context, null)//改成this调用3个参数的构造constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)//在这里统一进行处理constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {context?.let {//返回一个与attrs中列举出的属性相关的数组,数组里面的值由样式属性指定val attributes = it.obtainStyledAttributes(attrs, R.styleable.MyView)//获取自定义属性(格式:属性名称_条目名称)text = attributes.getString(R.styleable.MyView_myText)textSize = attributes.getDimensionPixelSize(R.styleable.MyView_myTextSize, 0)textColor = attributes.getColor(R.styleable.MyView_myTextColor, Color.BLACK)maxLength = attributes.getInt(R.styleable.MyView_myMaxLength,1)background = attributes.getResourceId(R.styleable.MyView_myBackground,R.drawable.ic_launcher_foreground)inputType = attributes.getInt(R.styleable.MyView_myInputType,0)//回收资源attributes.recycle()}}
}
2.3 布局中使用(属性使用)
- 根布局添加命名空间(只需要输入app,IDE会自动补全)。
- 控件名称使用完整路径(只需要输入自定义View的类名,IDE会自动补全)。
- 未自定义的属性View会去处理(继承自View),使用自定义的属性就是 app: 开头的。
<!--根布局添加命名空间-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!--控件名称使用完整路径--><com.example.kotlindemo.view.MyViewandroid:layout_width="match_parent"android:layout_height="wrap_content"app:myBackground="@drawable/ic_launcher_foreground"app:myInputType="number"app:myText="Hello Word!"app:myTextColor="@color/black"app:myTextSize="20sp"app:myMaxLength="20"/>
</LinearLayout>相关文章:
View 自定义 - 属性 xml
一、概念 在 xml 中为控件设置的属性。自定义属性名称如果使用系统已定义的,例如 textSize 会在编译时报错。 格式类型定义/使用 string 字符串 <attr name "myContent" format "color" /> android:myContent "Hello Word!&quo…...
2007-2022年全国各地级市金融机构网点数据
2007-2022年地级市金融机构网点数据 1、时间:2007-2022年 2、指标:行政区划代码、年份、城市名称、所属省份、银行网点数量、其中-政策性银行及国家开发银行营业网点占比、其中-商业银行营业网点数量占比、其中-农村金融机构营业网点数量占比 3、范围…...
OpenAI开发者大会掀起风暴:GPT模型价格狂降50%,应用商店即将亮相,AI技术将引爆全球!
OpenAI首届开发者大会召开了! 关键信息: GPT-4升级版GPT-4 Turbo来了,上下文窗口达到128k,为GPT-4的4倍;OpenAI还降低了几乎所有模型的API使用价格,整体便宜了一半多;GPT-4系列的多模态能力向B…...
yo!这里是STL::unordered系列简单模拟实现
目录 前言 相关概念介绍 哈希概念 哈希冲突与哈希函数 闭散列 框架 核心函数 开散列 框架 核心函数 哈希表(开散列)的修改 迭代器实现 细节修改 unordered系列封装 后记 前言 我们之前了解过map和set知道,map、set的底层结构是…...
基础课25——业务流程分析
1.流程的定义&作用 业务流程是企业中一系列创造价值的活动的组合,它是企业运营的基础,也是企业提高效率、优化资源配置的重要手段。通过优化业务流程,企业可以更好地满足客户需求,提高客户满意度,同时也可以提高自…...
快速实现一个企业级域名 SSL 证书有效期监控巡检系统
Why 现在对于企业来说,HTTPS 已经不是可选项,已经成为一个必选项。HTTPS 协议采用 SSL 协议,采用公开密钥的技术,提供了一套 TCP/IP 传输层数据加密的机制。SSL 证书是一种遵守 SSL 协议的服务器数字证书,一般是由权威…...
[SSD综述 1.5] SSD 主控和固件核心功能详解(万字)
依公知及经验整理,原创保护,禁止转载。 1. 主控概述1.1 主控作用 2. 主控的硬件功能和实现2.1 主控处理器2.2 闪存、主机接口2.3 主控纠错2.4 断电保护 3 固件功能3.1 FTL3.2 预留空间(Over-provisioning)3.3 Trim3.4 写入放大(Write amplification)3.5 …...
Mybatis-Plus前后端分离多表联查模糊查询分页
数据准备 数据库配置: /*Navicat Premium Data TransferSource Server : localhost_3306Source Server Type : MySQLSource Server Version : 80100 (8.1.0)Source Host : localhost:3306Source Schema : test01Target Server Type : MySQLT…...
【Ruoyi管理后台】用户登录强制修改密码
近期有个需求,就是需要调整Ruoyi管理后台:用户如果三个月(长时间)未修改过密码,需要在登录时强制修改密码,否则不能登录系统。 一、后端项目调整 从需求来看,我们需要在用户表增加一个字段,用于标记用户最…...
计算机网络基础知识1
1、tcp三次握手? SYN,标志位,用于建立TCP连接的握手过程中的标志位。 ACK,确认位,用于说明整个包是确认报文。 TCP/IP协议是传输层的一个面向连接提供可靠安全的传输协议。第一次握手有客户端发起,客户端向…...
人机交互中的多/变尺度态势感知
人机交互是指在人与计算机之间进行信息交换和任务完成的过程中,通过各种界面和交互方式来实现人机之间的有效沟通和协作。多尺度上下文是人机交互中一个重要的概念,它指的是在不同层次或不同尺度的信息之间建立联系,以便更好地理解和处理信息…...
命名管道原理(和匿名管道的对比),mkfifo(命令行,函数),命名管道模拟实现代码+与多个子进程通信代码
目录 命名管道 引入 原理 和匿名管道的对比 使用 -- mkfifo 命令行指令 创建 文件类型p 使用 函数 函数原型 模拟实现 头文件 客户端代码 服务端代码 运行情况 模拟实现 -- 与多个子进程 介绍 服务端代码: 运行情况 命名管道 引入 匿名管道只能用于父子进程…...
pytest全局变量的使用
这里重新阐述下PageObject设计模式: PageObject设计模式是selenium自动化最成熟,最受欢迎的一种模式,这里用pytest同样适用 这里直接提供代码: 全局变量 conftest.py """ conftest.py 全局变量,主要实…...
FreeRTOS源码阅读笔记2--list.c
list.c中主要完成列表数据结构的操作,有列表和列表项的初始化、列表的插入和移除。 2.1列表初始化vListInitialise() 2.1.1函数原型 void vListInitialise( List_t * const pxList ) pxList:列表指针,指向要初始化的列表。 2.1.2函数框架…...
杂货铺 | citespace的使用
安装教程 【CiteSpace保姆级教程1】文献综述怎么写? 📚数据下载 1. 新建文件夹 2. 数据下载 知网高级检索 数据选中导出 :一次500 导出后重命名为download_xxx.txt,放到input文件里 3. 数据转换 把output里的数据复制到data里…...
C++ 静态成员变量初始化规则
每一天一个小trick!! 为什么静态成员不能在类内初始化? 在C中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样。 class A { private: static int count …...
Docker安装、卸载,以及各种操作
docker是一个软件,是一个运行与linux和windows上的软件,用于创建、管理和编排容器;docker平台就是一个软件集装箱化平台,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中…...
深入理解 C 语言的内存管理
文章目录 引言内存管理的重要性C语言内存布局C语言内存管理堆和栈内存的区别和用途内存分配和释放的过程C语言动态内存分配的概念和原因malloc()、calloc() 和 realloc() 等函数的使用悬挂指针和野指针内存泄漏和如何避免结论 引言 C语言是充满力量且灵活的编程语言࿰…...
利用Caddy实现http反向代理
利用Caddy实现http反向代理 1 Caddy是什么 Caddy是一个开源的,使用Golang编写的,支持HTTP/2的Web服务端。它的一个显著特征就是默认启用HTTPS。 和nginx类似。 2 多个后端服务 假如现在有3个后端http服务:分别在启动在 app1 http://10…...
【Qt之QVariant】使用
介绍 QVariant类类似于最常见的Qt数据类型的联合。由于C禁止联合类型包括具有非默认构造函数或析构函数的类型,大多数有趣的Qt类不能在联合中使用。如果没有QVariant,则QObject::property()和数据库操作等将会受到影响。 QVariant对象同时持有一个单一…...
基于YOLO的安全帽佩戴检测系统~Python+模型训练+2026原创+YOLO算法
项目简介 基于 YOLO 的智能安全帽佩戴检测平台,面向施工现场图片识别、检测记录管理与安全宣传信息展示等业务场景。系统后端采用 Flask 搭建 RESTful API 服务,结合数据库进行业务数据持久化存储,并通过 JWT 实现用户身份认证与接口访问控制…...
基于YOLOv8深度学习的花卉识别检测系统(YOLOv8+YOLO数据集+UI界面+Python项目源码+模型)
一、项目介绍 随着计算机视觉技术的快速发展,基于深度学习的图像识别技术在植物分类与识别领域展现出巨大的应用潜力。本系统基于先进的YOLOv8目标检测算法,构建了一个高效准确的花卉识别检测系统,能够实现对13种不同花卉的实时检测与识别。…...
MCP Server避坑指南:用Java写一个能连数据库、读文件的AI工具集
MCP Server避坑指南:用Java构建企业级AI工具链 在数字化转型浪潮中,企业积累的海量数据正成为AI应用的"金矿"。但如何让大语言模型安全访问这些分布在数据库、文件系统的"数据孤岛"?MCP协议为这个问题提供了优雅的解决方…...
RestTemplate遇到非RESTful接口怎么办?3种表单参数处理方案对比
RestTemplate应对非RESTful接口的实战指南 在现实开发中,我们常常会遇到各种不符合RESTful规范的接口设计。这些接口可能采用传统的表单传参方式,或是混合了路径参数与查询参数的"四不像"设计。本文将深入探讨三种高效处理这类非标准接口的方案…...
别再手动敲命令了!用Ansible一键搞定Harbor 2.14.0高可用部署(附完整Playbook)
Ansible自动化部署Harbor 2.14.0高可用集群实战指南 在容器化技术普及的今天,企业级私有镜像仓库Harbor已成为DevOps工具链中不可或缺的一环。然而,传统的手动部署方式不仅耗时费力,更难以保证多环境的一致性。本文将展示如何通过Ansible实现…...
Modern.js 多环境配置终极指南:开发、测试、预发布与生产环境的完整实践
Modern.js 多环境配置终极指南:开发、测试、预发布与生产环境的完整实践 【免费下载链接】modern.js Modern.js is a web engineering system, including a web framework and a npm package solution. 项目地址: https://gitcode.com/gh_mirrors/mo/modern.js …...
CMake构建类型避坑指南:为什么你的Release模式没有优化?CMAKE_BUILD_TYPE常见问题排查
CMake构建类型避坑指南:为什么你的Release模式没有优化? 在C项目开发中,构建类型的选择直接影响最终生成的可执行文件性能。许多开发者在使用CMake时都遇到过这样的困惑:明明设置了CMAKE_BUILD_TYPERelease,但生成的代…...
15 分钟上线|开源克隆网站 + 一键部署,搭建你自己的产品
把目标网站像素级克隆下来,再用部署技能把它一键部署到线上。全程主要靠自然语言对话完成,不需要命令行操作,不需要懂代码。你要做的只有一件事:把“你想复制哪个网站、要怎么上线”说清楚,其它交给 AI 去检测、拆解、…...
静息态fMRI分析避坑指南:DPARSFA预处理中那些容易踩的‘雷’(附解决方案)
静息态fMRI分析实战避坑手册:DPARSFA预处理中的7个致命陷阱与修复方案 当你熬夜跑完DPARSFA预处理流程,满心期待地点开结果图时——突然发现ReHo图像像被泼了墨水,fALFF数值全部溢出,或是软件弹出一串看不懂的报错代码。这种崩溃…...
5步释放Win11潜能:用Win11Debloat让系统性能提升60%的实战指南
5步释放Win11潜能:用Win11Debloat让系统性能提升60%的实战指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutte…...
