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

示例:



  

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

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

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

常用 format 类型包括:

Tana
Tana

“节点式”AI智能笔记工具,支持超级标签。

下载
  • 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工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

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

910

2023.08.02

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

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

366

2023.11.13

java boolean类型
java boolean类型

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

42

2025.11.30

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

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

866

2023.07.31

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

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

454

2024.06.27

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

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

1939

2024.04.01

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

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

2116

2024.08.01

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

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

1145

2024.11.28

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

3

2026.03.03

热门下载

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

精品课程

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

共162课时 | 19.8万人学习

Java 教程
Java 教程

共578课时 | 76.2万人学习

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

共64课时 | 6.9万人学习

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

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