当前位置: 首页 > 编程日记 > 正文

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

一、 在res/values 文件下定义一个attrs.xml 文件.代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>
  3. <declare-styleable name="MyView">  
  4. <attr name="textColor" format="color" />  
  5. <attr name="textSize" format="dimension" />  
  6. </declare-styleable>
  7. </resources>

二、 我们在MyView.java 代码编写如下,其中下面的构造方法是重点,我们获取定义的属性R.sytleable.MyView_textColor, 获取方法中后面通常设定默认值(float textSize = a.getDimension(R.styleable.MyView_textSize, 36 ); ) 防止我们在xml 文件中没有定义.从而使用默认值!

MyView 就是定义在<declare-styleable name="MyView "></declare-styleable> 里的 名字,获取里面属性用 名字_ 属性 连接起来就可以.TypedArray 通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性!

  1. public MyView(Context context,AttributeSet attrs)  
  2. {
  3. super(context,attrs);  
  4. mPaint = new Paint();  
  5. TypedArray a = context.obtainStyledAttributes(attrs,
  6. R.styleable.MyView);
  7. int textColor = a.getColor(R.styleable.MyView_textColor,  
  8. 0XFFFFFFFF);  
  9. float textSize = a.getDimension(R.styleable.MyView_textSize, 36);  
  10. mPaint.setTextSize(textSize);
  11. mPaint.setColor(textColor);
  12. a.recycle();
  13. }

MyView.java  MyView控件全部代码如下 

  1. public class MyView extends View {  
  2. private Paint mPaint;  
  3. private Context mContext;  
  4. private static final String mString = "Welcome to Mr Wei's blog";  
  5. public MyView(Context context) {  
  6. super(context);  
  7. mPaint = new Paint();  
  8. }
  9. public MyView(Context context,AttributeSet attrs)  
  10. {
  11. super(context,attrs);  
  12. mPaint = new Paint();  
  13. TypedArray a = context.obtainStyledAttributes(attrs,
  14. R.styleable.MyView);
  15. int textColor = a.getColor(R.styleable.MyView_textColor,  
  16. 0XFFFFFFFF);  
  17. float textSize = a.getDimension(R.styleable.MyView_textSize, 36);  
  18. mPaint.setTextSize(textSize);
  19. mPaint.setColor(textColor);
  20. a.recycle();
  21. }
  22. @Override  
  23. protected void onDraw(Canvas canvas) {  
  24. // TODO Auto-generated method stub  
  25. super.onDraw(canvas);  
  26. //设置填充  
  27. mPaint.setStyle(Style.FILL);
  28. //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标  
  29. canvas.drawRect(new Rect(10, 10, 100, 100), mPaint);  
  30. mPaint.setColor(Color.BLUE);
  31. //绘制文字  
  32. canvas.drawText(mString, 10, 110, mPaint);  
  33. }
  34. }

三、将我们自定义的MyView 加入布局main.xml 文件中,并且使用自定义属性,自定义属性必须加上:

xmlns:test ="http://schemas.android.com/apk/res/com.android.tutor"  ,test是自定义属性的前缀,com.android.tutor 是我们包名.

main.xml 全部代码如下:

  1. <?xml
  2. version="1.0" encoding="utf-8"?>  
  3. <LinearLayout
  4. xmlns:android="http://schemas.android.com/apk/res/android"  
  5. xmlns:test="http://schemas.android.com/apk/res/com.android.tutor"  
  6. android:orientation="vertical"  
  7. android:layout_width="fill_parent"  
  8. android:layout_height="fill_parent"  
  9. >
  10. <TextView
  11. android:layout_width="fill_parent"   
  12. android:layout_height="wrap_content"   
  13. android:text="@string/hello"  
  14. />
  15. <com.android.tutor.MyView
  16. android:layout_width="fill_parent"   
  17. android:layout_height="fill_parent"   
  18. test:textSize="20px"  
  19. test:textColor="#fff"  
  20. />
  21. </LinearLayout>

format就是格式,里面的就是这个属性对应的格式,下面列出来大致的格式有:

1. reference:参考某一资源ID,以此类推

(1)属性定义:

(2)属性使用:

<imageview< p="">

android:layout_width = "42dip"

android:layout_height = "42dip"

android:background = "@drawable/图片ID"

/>

2. color:颜色值

3. boolean:布尔值

4. dimension:尺寸值。注意,这里如果是dp那就会做像素转换

5. float:浮点值。

6. integer:整型值。

7. string:字符串

8. fraction:百分数。

9. enum:枚举值

10. flag:是自己定义的,类似于 android:gravity="top",就是里面对应了自己的属性值。

11. reference|color:颜色的资源文件。 12.reference|boolean:布尔值的资源文件

注意://由于reference是从资源文件中获取:所以在XML文件中写这个属性的时候必须personattr:name="@string/app_name"这种格式,否则会出错

转载于:https://www.cnblogs.com/lianghui66/p/4074143.html

相关文章:

排序学习之---快速排序

一、前言 快速排序是一种交换排序&#xff0c;它由C. A. R. Hoare在1962年提出。 二、算法思想 快速排序的基本思想是&#xff1a;通过一趟排序将要排序的数据分割成独立的两部分&#xff1a;分割点左边都是比它小的数&#xff0c;右边都是比它大的数。 然后再按此方法对这两部…

1059 Prime Factors

1. 第一次测试点三错误&#xff0c;由于1既不是质数也不是合数&#xff0c;因此对于1来说需要有一个特殊判断&#xff0c;输出&#xff1a;11&#xff0c;但是一开始多加了一个等号。 2. 本题需要数学基础好&#xff0c;两个重点&#xff1a; (1)会打印某个范围内的素数表 (…

适用于SQL Server生产环境DBA的七大技巧

摘自&#xff1a;http://database.ctocio.com.cn/452/8976452.shtml1、使用forfiles命令删除陈旧的数据库备份文件 从Windows Server 2003开始forfiles命令就是Windows的一个自带命令行工具&#xff0c;它主要用于对文件的批处理&#xff0c; 利用SQL Server代理作业&#xff0…

关于PCA算法的一点学习总结

本文出处&#xff1a;http://blog.csdn.net/xizhibei PCA&#xff0c;也就是PrincipalComponents Analysis&#xff0c;主成份分析&#xff0c;是个非常优秀的算法&#xff0c;依照书上的说法&#xff1a; 寻找最小均方意义下&#xff0c;最能代表原始数据的投影方法 然后自己…

1096 Consecutive Factors

1. 对于题目描述中 list the smallest sequence of the consecutive factors 正确理解是&#xff1a;如果有多组连续因子&#xff0c;输出开头因子最小的那个序列(一开始理解成输出数目最小的那个序列) 2. 想象一下这种情况&#xff0c;2*3*4*5 120&#xff0c;4*5*6 120&am…

百度DisConf分布式配置框架源码试读(一)HttpClient 长连接

Spring Cloud Config配置中心我在学习Spring Cloud Config配置中心时理解了它体系下的配置中心的强大。实现了配置的远程管理、微服务的配置更新。Spring Cloud Config配置中心体系还是有其不足的地方。虽然它实现了配置和服务的分离。但是做不到实时的更新。需要手动触发POST …

开篇第一题:经典中的经典!

开篇第一题&#xff1a;经典中的经典&#xff01;——评《编程之美》原贴地址&#xff1a;http://www.douban.com/review/2130819/ 应该是差不多两个月前收到了这本书&#xff0c;一直到最近才抽出时间来看了下&#xff0c;这本书的开篇的第一题现在基本已经成了经典中的经典了…

(C++)高精度整数的存储、读入、比较和四则运算

目录 1. 存储 2. 读入 3. 比较大小 4. 加法 5. 减法 6. 高精度整数和低精度整数的乘法 7. 高精度整数除以低精度整数 高精度整数&#xff0c;又称大整数&#xff0c;其含义就是用基本数据类型无法存储其精度的整数。如&#xff1a;10进制下有着1000个数位的整数。 低精…

TP-link 设置MAC地址过滤

如果你想限制上网的人数&#xff0c;你可以在路由中设置MAC地址过滤&#xff0c;或IP地址过滤 以下以MAC地址过滤为例&#xff1a; http://192.168.1.1/ 输入用户名&#xff0c;密码登录 进入介面&#xff1a; “开启防火墙&#xff08;防火墙的总开关&#xff09;” 也要打上…

flask的客户端服务端

1.首先要进行后端与前端的连接有get 和post请求 get请求是直接在网页上打出已将定义好的网址 if __name__ __main__: app.run(host"localhost",port8800)host也可以写ip地址2.在进行交互前需要提前引入 flask 模块 pip3 install Flask详细代码 1 import json2 #…

1023 Have Fun with Numbers

考察大数乘法(整型是2)或者加法(两个相同的数字相加)&#xff0c;然后将两个大数用到的0-9的个数比对。 进入比对前先判断长度是否相等&#xff0c;如不等&#xff0c;说明一定不是原序列。 一些需要注意的细节&#xff1a; 1. 字符串的字符转化为整数时不要忘记 减0 2. 封…

Oracle中Hint深入理解(原创)

http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的&#xff0c;在绝大多数情况下它会选择正确的优化器&#xff0c;减轻了DBA的负担。但有时它也聪明反被聪明误&#xff0c;选择了很差的执行计划&#xff0c;使某个语句的执行变得奇慢无比。 此时就…

css sprites之圆角

第一步&#xff1a;创建我们的 Sprite用PS等工具合成如图所示的图片&#xff08;以一个像素的红线来区分&#xff09;第二部分:编写HTML代码首先&#xff0c;我们会给容器 div 一个 .roundedBox类 :<div class"roundedBox"></div> 现在&#xff0c;我们必…

爬虫原理与数据抓取----- urllib2:URLError与HTTPError

urllib2 的异常错误处理 在我们用urlopen或opener.open方法发出一个请求时&#xff0c;如果urlopen或opener.open不能处理这个response&#xff0c;就产生错误。 这里主要说的是URLError和HTTPError&#xff0c;以及对它们的错误处理。 URLError URLError 产生的原因主要有&…

1024 Palindromic Number

1. 本题给的N的范围是10位以内的整数&#xff0c;但是注意了不知要要和反序列相加多少次&#xff0c;因此大数的int d[]的大小10是远远不够&#xff0c;100才全部AC。 2. 一开始不通过不知道是位数不够&#xff0c;以为是到确定步数停下来的代码写错了&#xff0c;其实通过两个…

HibernateTemplate 查询

Spring中常用的hql查询方法getHibernateTemplate()上 一、find(String queryString); 示例&#xff1a;this.getHibernateTemplate().find("from bean.User"); 返回所有User对象 二、find(String queryString , Object value); 示例&#xff1a;this.getH…

EMQ学习笔记---Clean Session和Retained Message

MQTT会话(Clean Session)MQTT客户端向服务器发起CONNECT请求时&#xff0c;可以通过’Clean Session’标志设置会话。‘Clean Session’设置为0&#xff0c;表示创建一个持久会话&#xff0c;在客户端断开连接时&#xff0c;会话仍然保持并保存离线消息&#xff0c;直到会话超时…

JPA相关--Annotation

1.自定义注解import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.METHOD) //指定可以用在什么地方&#xff0c;默认所有地方 Retention(…

(C++)变长数组vector的常见用法

目录 1. vector的定义 2. vector内的元素访问 3. vector常用函数 push_back(x) pop_back() size() clear() insert(it,x) erase(it)和erase(first,last) 4. vector常见用途 1.存储数据 2.用邻接表存储图 1. vector的定义 1.1 单独定义vector vector<typename&…

【kuangbin专题】计算几何_半平面交

1.poj3335 Rotating Scoreboard 传送&#xff1a;http://poj.org/problem?id3335 题意&#xff1a;就是有个球场&#xff0c;球场的形状是个凸多边形&#xff0c;然后观众是坐在多边形的边上的&#xff0c;问你是否在球场上有个地方可以放一个记分牌&#xff0c;然后所有的观众…

设计模式之状态模块加观察者模式

背景&#xff1a; 用户操作鼠标&#xff0c;涉及的动作有左击、右击、双击。每种动作对应一种状态&#xff0c;状态的切换对应着不同的鼠标点击事件。 类图&#xff1a; 状态接口类&#xff1a; /*** 状态接口**/ public interface State {public void change(); } 鼠标移入类&…

objectdatasource中delete的尴尬。

这里用的是listview和objectdatasource。本来是为了省力直接用了objectdatasource&#xff0c;这可倒好为了一个不知名的问题折腾了半天。首先&#xff0c;本来用objectdatasource&#xff0c;里面的各种method&#xff0c;比如delete&#xff0c;update等等&#xff0c;对应的…

1039 Course List for Student

1. 此题必须采用vectorhash的策略&#xff0c;否则最后一个用例超时&#xff0c;定义一个vector类型的数组&#xff0c;长度由名字的最大范围决定 vector<int> stus[26*26*26*10]; 2. 起初我定义了结构体&#xff0c;里面用一个字符串存放学生的名字&#xff0c;vector…

《编程匠艺》读书笔记

《编程匠艺》读书笔记之一 《编程匠艺》读书笔记之二 《编程匠艺》读书笔记之三 《编程匠艺》读书笔记之四 《编程匠艺》读书笔记之五 《编程匠艺》读书笔记之六 《编程匠艺》读书笔记之七 《编程匠艺》读书笔记之八 《编程匠艺》读书笔记之九 《编程匠艺》读书笔记之十 《编程…

【转】C语言的memset函数

http://vip.6to23.com/tenax/clib/string/memset.htmlhttp://hi.baidu.com/longchengjiang/blog/item/32c0e243acb8191772f05d29.htmlhttp://www.cnblogs.com/xray2005/archive/2009/07/07/1518288.html 原型&#xff1a;extern void *memset(void *buffer, int c, int count);…

一个6年iOS程序员的工作感悟,送给还在迷茫的你

前言 每一个开发者&#xff0c;都有一段不愿提起的经历&#xff0c;很多年前&#xff0c;刚刚从大学毕业的时候&#xff0c;很多公司来校招。其中最烂俗的一个面试问题是&#xff1a;“你希望你之后三到五年的发展是什么&#xff1f;”。我当时的标准回答是&#xff08;原话&am…

1063 Set Similarity

1. 这题需要利用set容器的去重功能&#xff0c;因此使用set来存放每一组的数据。 2. 起初我的计算相似度的函数是这样设计的&#xff1a;传入set1和set2&#xff0c;声明一个set3&#xff0c;将set1中的数据全部插入set3中&#xff0c;再声明一个重复元素个数same_n&#xff0…

Volume是如何工作的

在这篇文章中&#xff0c;我会尽最大的努力来解释Volume是如何工作的&#xff0c;并展示一些最佳实践。这篇文章主要是针对那些对Volume不了解的Docker用户&#xff0c;当然有经验的用户也可以通过本文了解一些Volume的细节。想要了解Docker Volume&#xff0c;首先我们需要知道…

使用 TFDConnection 的 pooled 连接池

从开始看到这个属性&#xff0c;就一直认为他可以提供一个连接池管理功能&#xff0c; 苦于文档资料太少&#xff0c; 甚至在帮助中对该属性的使用都没有任何介绍&#xff0c;如果你搜索百度&#xff0c;也会发现基本没资料。 最后终于在其官方网站看到了其完整相关的英文资料&…

Java与UML交互图

Java与UML交互图 前面我们主要讨论的是UML类图&#xff0c;下面我们要讨论的是另一种UML图——交互图&#xff08;Interaction Diagram&#xff09;。交互图描述的是一组对象之间的交互过程&#xff0c;或者说&#xff0c;这里我们实际上要回答这样一个问题&#xff1a;“方法调…