0

0

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

畫卷琴夢

畫卷琴夢

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

|

604人浏览过

|

来源于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(名字可自定义,但推荐统一叫这个)。文件根节点必须是

示例:



  

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

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

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

常用 format 类型包括:

面试猫
面试猫

AI面试助手,在线面试神器,助你轻松拿Offer

下载
  • reference:引用资源(如 @drawable/xxx、@color/xxx)
  • color:颜色值(#RGB、#ARGB、@color/xxx)
  • dimension:尺寸(16dp、24sp、@dimen/xxx)
  • string:字符串(支持 @string/xxx)
  • boolean:布尔值(true/false)
  • integer:整数
  • 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_),避免和系统属性冲突
  • 同一个 可被多个 复用(例如通用的 textColor
  • 若属性需同时支持 color 和 reference(如背景),可用 format="reference|color"
  • 枚举属性写法示例:

      
      

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

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

相关专题

更多
string转int
string转int

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

314

2023.08.02

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

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

346

2023.11.13

java boolean类型
java boolean类型

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

22

2025.11.30

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

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

617

2023.07.31

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

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

428

2024.06.27

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

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

1859

2024.04.01

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

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

2082

2024.08.01

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

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

942

2024.11.28

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

1

2026.01.06

热门下载

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

精品课程

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

共162课时 | 10.7万人学习

Java 教程
Java 教程

共578课时 | 42.3万人学习

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

共64课时 | 6.5万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号