讲师中心 微信公众号
AI工具推荐 视频效率加速

Android的attrs.xml文件怎么写 自定义View属性教程

梦婷小哥_7136

梦婷小哥_7136

发布时间:2026-01-05 11:56:41

|

624人浏览过

|

来源于php中文网

原创

attrs.xml 是 Android 中定义自定义 View 属性的核心文件,需在 res/values/ 下创建,用 声明属性组,配合 指定 name 和 format 类型,在布局中通过 xmlns:app 和 app:xxx 使用,并在 View 构造函数中通过 TypedArray 读取,务必调用 recycle()。

android的attrs.xml文件怎么写 自定义view属性教程

Android 的 attrs.xml 是定义自定义 View 属性的核心文件,它让控件支持在 XML 布局中通过自定义属性配置行为或样式。写对它,才能让自定义 View 真正“可配置、可复用、可维护”。

1. 创建 attrs.xml 文件

在 res/values/ 目录下新建一个 XML 文件,命名为 attrs.xml(名字可自定义,但推荐统一叫这个)。文件根节点必须是 <resources></resources>。

示例:



  

2. 定义自定义属性(declare-styleable)

用 <declare-styleable></declare-styleable> 包裹一组相关属性,name 通常与自定义 View 类名一致(便于识别和 IDE 提示)。

每个属性用 <attr></attr> 声明,需指定 name 和 format(类型)。

常用 format 类型包括:

Android Remote Control
Android Remote Control

远程控制 Android 设备,支持截图、自动化操作手机 App 等功能。本应用使用 uiautomator2 作为底层框架,通过 ADB 连接设备,用户无需 Root(1)查看手机屏幕;(2)自动化操作手机 App;(3)远程安装/卸载应用……

下载
  • reference:引用资源(如 @drawable/xxx、@color/xxx)
  • color:颜色值(#RGB、#ARGB、@color/xxx)
  • dimension:尺寸(16dp、24sp、@dimen/xxx)
  • string:字符串(支持 @string/xxx)
  • boolean:布尔值(true/false)
  • integer:整数
  • enum:枚举(需配合 <enum></enum> 子标签)
  • flag:位运算标志(类似 enum,但支持多选)

示例:为一个圆形进度条定义属性


  
  
  
  
  
  
  
  

3. 在布局 XML 中使用自定义属性

先在布局根标签中声明命名空间(推荐用 app):

xmlns:app="http://schemas.android.com/apk/res-auto"

然后在自定义 View 标签中使用 app:xxx 引用属性:

  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:cpv_max="100"
  app:cpv_progress="65"
  app:cpv_stroke_width="8dp"
  app:cpv_stroke_color="@color/blue"
  app:cpv_show_text="true" />

4. 在自定义 View 构造函数中读取属性

在自定义 View 的三个构造函数中(尤其带 AttributeSet 的那个),用 TypedArray 获取属性值:

public CircleProgressView(Context context, AttributeSet attrs) {
  super(context, attrs);
  TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleProgressView);
  max = a.getInt(R.styleable.CircleProgressView_cpv_max, 100);
  progress = a.getInt(R.styleable.CircleProgressView_cpv_progress, 0);
  strokeWidth = a.getDimensionPixelSize(R.styleable.CircleProgressView_cpv_stroke_width, 6);
  strokeColor = a.getColor(R.styleable.CircleProgressView_cpv_stroke_color, Color.BLUE);
  showText = a.getBoolean(R.styleable.CircleProgressView_cpv_show_text, true);
  a.recycle(); // 必须调用,释放资源
}

注意:
- 属性 ID 路径为 R.styleable.声明名_属性名
- 每个 getXXX() 方法第二个参数是默认值(当 XML 中未设置时生效)
- a.recycle() 不可省略,避免内存泄漏

5. 小技巧与注意事项

  • 属性名尽量加前缀(如 cpv_),避免和系统属性冲突
  • 同一个 <attr></attr> 可被多个 <declare-styleable></declare-styleable> 复用(例如通用的 textColor)
  • 若属性需同时支持 color 和 reference(如背景),可用 format="reference|color"
  • 枚举属性写法示例:

      
      

    读取时用 a.getInt(R.styleable.CircleProgressView_cpv_mode, 0)
  • AS 会自动为 declare-styleable 生成 R.styleable.XXX,无需手动维护

不复杂但容易忽略细节,写好 attrs.xml 是自定义 View 工程化的第一步。

热门AI工具

更多
超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6759

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

2150

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

163

2025.11.30

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1769

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1211

2024.06.27

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4764

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6177

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2522

2024.11.28

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.8万人学习

Java 教程
Java 教程

共578课时 | 194.4万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 9.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn