自定义View自定义属性

Android自定义View属性实战教程 本文还有配套的精品资源,点击获取 简介:在Android开发中,自定义View允许开发者扩展默认视图功能,以满足特定的用户界面需求。本文详细介绍了如何在自定义View中使用自定义属性。首先,讲解了如何在 attrs.xml 文件中声明自定义属性,并展示了如何在自定义View的构造函数中使用 obtainStyledAttributes() 方法获... 阅读详情

转自:https://i-blog.csdnimg.cn/blog_migrate/370a96dbaaabca17e93a2f916f087169.png




在Android开发中常常需要自定义View,在自定义View后,常常需要一些特别的属性,这里一并讲解如何自定义属性。


1.自定义一个View类:MyNewElement.java


[java]  view plain copy
  1. package com.ixgsoft.space;  
  2.   
  3.   
  4. import android.content.Context;  
  5. import android.content.res.TypedArray;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Color;  
  8. import android.graphics.Paint;  
  9. import android.util.AttributeSet;  
  10. import android.util.Log;  
  11. import android.view.MotionEvent;  
  12. import android.view.View;  
  13. import android.widget.Button;  
  14. import android.widget.TextView;  
  15. import android.widget.Toast;  
  16.   
  17.   
  18. /** 
  19.  * @Description:  
  20.  */  
  21. public class NewMyElement extends View {  
  22.   
  23.   
  24.       
  25.     private String TAG = "NewMyElement";  
  26.     private String text;  
  27.       
  28.     public NewMyElement(Context context) {  
  29.         super(context);  
  30.           
  31.     }  
  32.     public NewMyElement(Context context, AttributeSet attrs) {  
  33.         super(context, attrs);  
  34.         init(attrs);  
  35.   
  36.   
  37.   
  38.   
  39.     }  
  40.     public NewMyElement(Context context, AttributeSet attrs, int defStyle) {  
  41.         super(context, attrs, defStyle);  
  42.         init(attrs);  
  43.     }  
  44.   
  45.   
  46.     public void init(AttributeSet attrs){  
  47.           
  48.         TypedArray t = getContext().obtainStyledAttributes(attrs,R.styleable.NewMyElement);  
  49.           
  50.         String textValue = t.getString(R.styleable.NewMyElement_textValue);  
  51.         float textSize = t.getDimension(R.styleable.NewMyElement_textSize, 36);  
  52.         int textColor = t.getColor(R.styleable.NewMyElement_textColor, 0xff000000);  
  53.     }  
  54.       
  55.   
  56.   
  57.   
  58.   
  59.       
  60.       
  61.   
  62.   
  63. }  




经过以上编码,就成功的创建一个自己的View类了。如果要把这个View类放到layout文件中,那么应该这样写:


[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LineanLayout   
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:my="http://schemas.android.com/apk/res/com.ixgsoft.space"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     >  
  8.       
  9.     <com.ixgsoft.space.NewMyElement  
  10.         my:textValue="草了1"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         />  
  14.     <com.ixgsoft.space.NewMyElement   
  15.         my:textValue="草了2"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         />  
  19.   
  20.   
  21. </LineanLayout>   


在LinearLayout中,我定义了两个NewMyElement元素,注意,自定义的View类,在Layout布局文件中必须使用完全包名,我这里使用的是com.ixgsoft.space.NewMyElement。


2.创建自定义属性


在Android中要增加自定义属性,需要依靠attrs.xml文件。这里指定的自定义属性,是在layout布局文件中使用的不是以android开头的属性,例如my:textValue。
首先,我们需要在/res/values目录下新建一个名为 attrs.xml的文件。


[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <declare-styleable name="NewMyElement">  
  4.         <attr name="textColor" format="color" />  
  5.         <attr name="textSize" format="dimension" />  
  6.         <attr name="textValue" format="string" />  
  7.     </declare-styleable>  
  8. </resources>  


这是一个android的resource文件,其中有一个域,名为 declare-styleable(声明属性)。这个域的有一个name属性为NewMyElement,这里很重要,这个name属性其实就是这个属性的在R类中的id。在这里域内部有3个attr域,他们都拥有两个属性,一个是name,代表这个属性的名字以及在layout布局文件中的调用名。format代表着这个属性的类型。这个属性怎么看呢?这里教大家一个方法。
在layout布局文件中,使用eclipse的提示功能(Alt+/),可以看到所有属性,这个时候按方向键,能够切换焦点,同时右部的提示也在变换。每一个android默认的属性,在提示的最后都有一个以[]包含的单词,这个就是这个属性的类型。 



目前已知的属性有这些:
reference      资源类型,通常是@开头,例如@+id/xxxx,@id/xxxxx
string             字符串类型,通常是文字信息
dimension   浮点类型,通常是尺寸度量,单位有很多px,dp,sp,dip等
color             颜色类型,通常是颜色16进制代码,支持ARGB。
boolean       布尔类型,true和false
enum           枚举类型,通常是代表这个属性提供了几种值来进行选择,并且只能选择这几种中的一个
flag             与enum基本没有区别。
integer         整数类型,通常是整数


创建完attrs.xml文件,现在我们需要把这个属性用到layout文件中。


[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LineanLayout   
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:my="http://schemas.android.com/apk/res/com.ixgsoft.space"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     >  
  8.       
  9.     <com.ixgsoft.space.NewMyElement  
  10.         my:textValue="草了1"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         />  
  14.     <com.ixgsoft.space.NewMyElement   
  15.         my:textValue="草了2"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         />  
  19.   
  20. </LineanLayout>   



以上代码中,在根元素的中增加了一个额外的命名空间,xmlns:my="
http://schemas.android.com/apk/res/com.ixgsoft.space
"
最后的com.ixgsoft.space需要更改为你自己的包名。
做好之后,就可以在元素中使用以my开头的属性了,当然这里是没有Eclipse提示的,只能自己对照着写。



3.在代码中调用自定义属性


回到我们的View类MyNewElement。


[java]  view plain copy
  1. package com.ixgsoft.space;  
  2.   
  3.   
  4. import android.content.Context;  
  5. import android.content.res.TypedArray;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Color;  
  8. import android.graphics.Paint;  
  9. import android.util.AttributeSet;  
  10. import android.util.Log;  
  11. import android.view.MotionEvent;  
  12. import android.view.View;  
  13. import android.widget.Button;  
  14. import android.widget.TextView;  
  15. import android.widget.Toast;  
  16.   
  17.   
  18. /** 
  19.  * @Description:  
  20.  */  
  21. public class NewMyElement extends View {  
  22.   
  23.   
  24.       
  25.     private String TAG = "NewMyElement";  
  26.     private String text;  
  27.       
  28.     public NewMyElement(Context context) {  
  29.         super(context);  
  30.           
  31.     }  
  32.     public NewMyElement(Context context, AttributeSet attrs) {  
  33.         super(context, attrs);  
  34.         init(attrs);  
  35.   
  36.   
  37.   
  38.   
  39.     }  
  40.     public NewMyElement(Context context, AttributeSet attrs, int defStyle) {  
  41.         super(context, attrs, defStyle);  
  42.         init(attrs);  
  43.     }  
  44.   
  45.   
  46.     public void init(AttributeSet attrs){  
  47.           
  48.         TypedArray t = getContext().obtainStyledAttributes(attrs,R.styleable.NewMyElement);  
  49.           
  50.         String textValue = t.getString(R.styleable.NewMyElement_textValue);  
  51.         float textSize = t.getDimension(R.styleable.NewMyElement_textSize, 36);  
  52.         int textColor = t.getColor(R.styleable.NewMyElement_textColor, 0xff000000);  
  53.     }  
  54.       
  55.   
  56.   
  57. }  


在init方法中,接收了一个AttributeSet 对象,然后使用getContext方法得到当前Context,调用Context.obtainStyledAttributes方法,传入AttributeSet 和R.styleable.NewMyElement,这里的R.styleable.NewMyElement,就是我们在attrs.xml中定义的名称,通过R.styleable来访问。
方法返回一个 typedArray对象。按照attrs,xml中定义的属性的类型,使用不同的get方法获取指定属性的值。看一看就懂了。

QT串口通信控制LED上位机开发教程 串口通信是嵌入式系统与PC端交互的基础技术,通过UART协议实现设备间的数据传输。QT框架提供了跨平台的串口编程支持,结合其GUI模块可以快速开发上位机控制程序。在工业自动化和物联网领域,这种上下位机架构广泛应用于设备监控和控制场景。本案例展示了如何使用QT的SerialPort模块实现LED控制功能,包含串口参数配置、指令发送等核心功能实现,为嵌入式GUI开发提供实践参考。 阅读详情

相关推荐

告别理论纠结!用ADS和Sigrity玩转电源完整性:从PDN阻抗优化到芯片供电仿真全流程

本文详细介绍了如何利用ADS和Sigrity工具进行电源完整性(PI)分析,从PDN阻抗优化到芯片供电仿真的全流程。通过频域、直流和时域分析,工程师可以精确评估电源网络性能,优化设计以避免电压波动和系统失效。文章还提供了ADS和Sigrity PowerDC的实战操作指南,帮助读者掌握现代PI设计的核心技术。

weixin_33749242的博客 310

自定义View的三种实现方式及自定义属性使用介绍

这里写目录标题一 前言二 三种自定义控件的方法2.1 组合控件2.2 继承控件2.2.1 继承View类系统控件2.2.2 继承ViewGroup类系统控件2.3 自绘控件2.3.1 自绘叶子View控件2.3.2 自绘ViewGroup控件三 在自定义View中使用自定义属性四 自定义属性格式汇总 一 前言 尽管Android系统提供了不少控件,但是有很多酷炫效果仍然是系统原生控件无法实现的。好在Android允许自定义控件,来弥补原生控件的不足。但是在很多初学者看来,自定义View似乎很难掌握。其中

qq_39431405的博客 4078

Java网页访问报错?手把手教你解决JRE插件缺失和浏览器拦截问题(附详细截图)

本文针对Java网页访问时常见的JRE插件缺失和浏览器拦截问题,提供了详细的诊断与解决方案。文章首先解释了问题根源在于现代浏览器出于安全考虑停止了对Java插件的支持,然后手把手指导用户确认Java安装、在控制面板配置安全站点列表,并针对Chrome、Edge、Firefox等主流浏览器的不同拦截机制给出了具体的应对策略,最后提供了系统性的故障排查清单,帮助用户彻底解决访问障碍。

weixin_29233857的博客 222

自定View自定义属性详解

开头 先说下自定义View属性的正常使用过程。可以参考本人之前的[自定义View]的笔记。 a. 在values/attrs.xml中添加需要的styleable和item declare-styleable一般命名成自定义View的名字,多想个名字有时候还是很难的。 declare-styleable其实不写也可以 b. 写一个用到自定义属性的自定义View c. 在Layo...

weixin_39821531的博客 492

SRAM:SRAM入门指南与工作原理

SRAM(Static Random Access Memory),即静态随机存取存储器,是一种能够读取和写入数据的内存(RAM)。它使用由晶体管组成的触发器来存储数据,只要有电源供应,数据就可以稳定地保存。与动态随机存取存储器(DRAM)不同,SRAM 不需要周期性地刷新来保持数据。

weixin_42896509的博客 1万+

采用MPU6050的手势遥控器

随着社会的发展与进步,电子产品日益更新,个人家庭迎来了越来越多的智能家电。然而,现在的智能电子设备产品的遥控器多数都是按键形的。操作繁琐不直观,学习成本大。并且对于有老人小孩的家庭,给他们的操作带来了巨大的障碍。手势遥控器是指利用简单的手势来指挥电子设备,获得便捷的操作体验。让家庭成员都可以享受科技发展带来的福利。MPU6050是一个运动传感器,内置陀螺仪,再由电子设备利用判断结果做出相应的响应即...

Sakura的博客小站 6602

Android --- 自定义View的三种实现方式及自定义属性使用介绍

我们在使用Android原生控件的时候,经常可以看到在布局文件中可以设置很多的属性值,如

梁同学与Android 2672

半桥LLC谐振变换器及同步整流MATLAB仿真(一)

LLC工作原理详细解析,工作过程详细拆解

qq_55203246的博客 3万+

Android 自定义View (一)

转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/24252901 很多的Android入门程序猿来说对于Android自定义View,可能都是比较恐惧的,但是这又是高手进阶的必经之路,所有准备在自定义View上面花一些功夫,多写一些文章。先总结下自定义View的步骤: 1、自定义View的属性 2、在View的构造方...

weixin_30521161的博客 2484

模拟电路综合笔试题解析

本专栏预计更新60期,当前为第10期,文章约6000字,旨在帮助读者掌握模拟电路笔试的核心知识点与实战技巧。文章分为五个章节,涵盖基础理论、高频考点、大厂题目解析等内容。首先,文章详细解析了DC-DC与LDO的区别及选型依据,并通过真题分析帮助读者理解其应用场景。接着,文章深入探讨了运放电路设计、同步降压电路设计等高频考点,并结合实际案例提供解决方案。此外,文章还分享了特斯拉、华为、大疆等大厂的面试题及解析,帮助读者应对复杂电路设计挑战。最后,文章总结了模拟电路设计中的关键技巧与优化方法,为读者提供全面的笔

启芯硬件的博客 470

基于百度地图API在AI Studio上的卫星地图块图像处理与分类

本项目基于百度地图API获取了不同的瓦片地图并进行合并等处理,可用于遥感和抽象地图的地图块的图像分类、分割、检测等数据的制作。瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变。首先确定地图服务平台所要提供的缩放级别的数量N,把缩放级别最高、地图比例尺最大的地图图片作为金字塔的底层,即第0层,并对其进行分块,从地图图片的左上角开始,从左至右、从上到下进行切割,分割成相同大小(比如256x256像素)的正方形地图瓦片,形成第0层瓦片矩阵;

斌擎科技 746

Android自定义View属性,使用或获取自定义View属性,获取View默认属性

&gt; 获取自定义View属性 Android 自定义属性时TypedArray的使用- https://blog.youkuaiyun.com/cswhale/article/details/53100792  TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomMenu, d...

ShareUs的专栏 2705

PyTorch生成式人工智能(7)——生成对抗网络(Generative Adversarial Network, GAN)实践详解

生成对抗网络 (Generative Adversarial Network, GAN) 最早由 Ian Goodfellow 于 2014 年提出,其中生成器试图创建与真实样本无法区分的数据样本,而判别器则试图区分生成器生成的样本与真实样本。在本节中,我们将介绍 GAN 的理论基础。然后,介绍如何使用 PyTorch 从零开始构建 GAN,以便了解所有细节,深入理解 GAN 的内部工作原理,为后续讨论 GAN 的其他更高级内容奠定基础,比如生成高分辨率图像或逼真的音乐。

盼小辉丶的博客 1万+

Android 自定义View 之 自定义View属性

我们可以自定义View,当然也可以自定义View的属性。下面就从多个方面来介绍自定义View属性的使用。在使用自定义属性之前,我们需要定义属性。一般我们会按下面的步骤来进行:

I'm Learning! 4525

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android自定义View 之自定义属性

1 自定义属性值 自定义view的起步是自定义属性,并且正确的读取属性。 在res/values/attrs.xml的文件中创建属性: <declare-styleable name="ViewDemoAttr35"> <attr name="string35" format="string"/> <attr name="bool...

lidongxiu0714 6675

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android View 自定义属性

待续····

Venus 的博客 1865

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

自定义View中自定义属性

1.在value文件夹下创建一个demo_att.xml 内容如下: format代表数据格式,有很多 可能对format不是很熟悉,目前Android系统内置的格式类型有integer比如ProgressBar的进度值,  float比如RatingBar的值可能是3.5颗星,  boolean比如Toggl

com360的专栏 2409

Android自定义View添加自定义属性

前言 前几天阿里的面试官问了我一个问题,如何实现自定义View的自定义属性,我第一感觉是很熟悉,但却答不上来。看来有必要记录一下。 实现 自定义一个View类 这里我举个简单的例子,自定义TextView : MyTextView.java public class MyTextView extends TextView { public MyTextView(Context context) ...

weixin_34375233的博客 1389

【Android View】自定义属性

在自定义view过程中有时为了方便需要自定义属性,本篇就来总结回顾下这个知识点。

dev晴天的博客 1943

android view自定义属性,Android自定义view属性

android自带的view都有自己的属性如android:id="@+id/myView"android:layout_width="200dp"android:layout_height="550dp"android:focusable="true"android:clickable="true"但是我们自己定义的view是否能添加属性呢?答案是可以的。下面直接进入主题:第一步:在res/va...

weixin_34951416的博客 417

View、自定义属性

1、添加自定义View的属性文件     xml version="1.0" encoding="utf-8"?>resources>declare-styleable name="myViewDefinedAttr"> attr name="attr1" format="boolean"/>attr name="attr2" format="integer"/>de

xuwanli2012的博客 325

Android 自定义属性,自定义控件、自定义View以及View的常见Error

Android 自定义属性,自定义控件、自定义View 自定义属性 1 要使用 系统的属性 可以使用所继承的控件的属性 如继承的TextView 或者 View 则相关的属性都可以不用声明直接使用 2 否则 要styleable中定义 &amp;amp;amp;amp;amp;amp;lt;attr name=&amp;amp;amp;amp;amp;quot;android:text&amp;amp;amp;amp;amp;quot; /&amp;a

5ingwings(SiHao)的博客 8410

自定义View —View属性和基本方法

写在前面 首先我们要明白,为什么要自定义View?主要是Android系统内置的View无法实现我们的需求,我们需要针对我们的业务需求定制我们想要的View。 开发俩年,多多少少写了些自定义控件和自定义View,这次还是好好整理下,面的有些东西老是遗漏。不过自己在公司前辈面前算是菜鸟了,所以水平有限,记录一些比较基础的,仅作个人总结和分享。 一、自定义View常用场景和分类 需求永远是在变更的,花样多的不行,很多时候系统自带的控件和布局无法完成的时候就可以使用自定义View来实现,或者,在某些多处复

Android 领域开发程序员,希望通过写博客的方式不断的总结提升自己,大家共同进步哦! 1264

android自定义view之自定义属性

这两天在Android中用到了自定义view,在自定义view时也顺便使用了下自定义属性。自定义属性以前只是耳闻 未曾谋面,这次借机会对自定义属性进行了一番学习,顺便总结了一下自定义属性的使用。 下面扫盲班老司机要开车了,小白快刷卡上车,大神拒载。 老司机 Android中经常用到自定义view,既然用了自定义view那就不得不提自定义属性。你是否思考过为什么我们在xml文件中进行布局时可...

qq_23018459的博客 258

Android -- 自定义 View XML属性详解

1. View的构造函数 自定义View必须重写至少一个构造函数 // 如果View是在Java代码里面new的,则调用第一个构造函数 public CustomView7(Context context) { super(context); } // 如果View是在.xml里声明的,则调用第二个构造函数 public CustomView...

一只驴在敲代码 4062

自定义view之自定义属性

1.首先在res的values文件下新建一个名为attrs.xml文件 在该xml文件中编写我们需要的属性 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyTextView"> <attr name="radius" form...

哼哼哈嘿的博客 617
上一篇: android里发送邮件mail的几种方式
下一篇: 自定义view中xml属性 提示Attribute "XXX" has already been defined
Cemmmmer
博客等级 码龄14年 3粉丝 50原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值