Android自定义控件——自定义属性

View绘制体系(三)——AttributeSet与TypedArray详解 View绘制体系(三)——AttributeSet与TypedArray详解 前言 上篇博客中讲了LayoutInflater.inflate机制,其中提到了AttributeSet和XmlPullParser两个接口,这里我们来详细的了解一下Android中提供的AttributeSet接口和它与XmlPullParser的区别,以及如何使用TypedArray获取AttributeSet中对... 阅读详情

转载请注明出处:http://blog.youkuaiyun.com/allen315410/article/details/39343401

       我们在自定义android组件的时候,除了用Java构建出组件的样子外,有时候还需要去申明一些“属性”提供给项目使用,那么什么是组件的属性呢?

例如在清单文件中,创建一个TextView的时候,这是需要制定TextView的android:layout_width="wrap_content" android:layout_height="wrap_content"等等这些都是组件的属性,TextView是android系统为我们提供好的组件,它的属性亦是android系统为我们提供了。详情查看android的源码,我这里举例android2.3的源码,路径是
/frameworks/base/core/res/res/values/attrs.xml,这个attrs.xml定义了所有android系统组件的属性。

当我们自定义组件时,除了可以使用android系统为我们提供好的属性之外,还可以自定义属性。自定义属性主要步骤如下:
一、在attrs.xml文件中声明属性 ,如:
[html]  view plain copy print ?
  1. <declare-styleable name="MyToggleBtn">            // 声名属性集的名称,即这些属性是属于哪个控件的。  
  2. <attr name="current_state" format="boolean"/>   // 声名属性 current_state 格式为 boolean 类型  
  3. <attr name="slide_button" format="reference"/>   // 声名属性 slide_button格式为 reference 类型  
  4. </declare-styleable>   
所有的format类型
reference     引用
color            颜色
boolean       布尔值
dimension   尺寸值
float            浮点值
integer        整型值
string          字符串
enum          枚举值

二、在布局文件中使用:在使用之前必须声名命名空间,xmlns:example="http://schemas.android.com/apk/res/com.example.mytogglebtn"
说明:xmlns      是XML name space 的缩写; 
          example   可为任意写符       
          http://schemas.android.com/apk/res/    此为android固定格式;      

          com.example.mytogglebtn    此应用的包名,如manifest配置文件中一致。

布局文件:

[html]  view plain copy print ?
  1. <com.example.mytogglebtn.MyToggleButton  
  2.     xmlns:example="http://schemas.android.com/apk/res/com.example.mytogglebtn"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"   
  5.     example:slide_button="@drawable/slide_button" />  

三、在代码中对属性进行解析,代码如下:

[java]  view plain copy print ?
  1. TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyToggleBtn);// 由attrs 获得 TypeArray  

以上是创建自定义属性的大致步骤。下面,我将要创建一个自定义控件的Demo,来学习学习自定义属性的相关知识点。

首先,需要创建一个自定义控件出来,并且继承View。在工程的res/values文件夹下创建attrs.xml文件:

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   
  4.     <!-- 声明属性级的名称 -->  
  5.     <declare-styleable name="MyView">  
  6.   
  7.         <!-- 声明一个属性,整型 -->  
  8.         <attr name="test_id" format="integer" />  
  9.         <!-- 声明一个属性,字符串 -->  
  10.         <attr name="test_msg" format="string" />  
  11.         <!-- 声明一个属性,引用,引用资源id -->  
  12.         <attr name="test_bitmap" format="reference" />  
  13.     </declare-styleable>  
  14.   
  15. </resources>  
然后在布局文件中,引用这个自定义控件MyView

[html]  view plain copy print ?
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     xmlns:example="http://schemas.android.com/apk/res/com.example.myattrs"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent" >  
  6.   
  7.     <com.example.myattrs.MyView  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_centerInParent="true"  
  11.         example:test_bitmap="@drawable/ic_launcher"  
  12.         example:test_msg="@string/app_name" />  
  13.   
  14. </RelativeLayout>  

由于创建出来的自定义组件MyView是继承于View的,所以必须得复写View的构造方法,View中有三个构造方法,先来看看复写带一个参数的构造方法:

[java]  view plain copy print ?
  1. package com.example.myattrs;  
  2.   
  3. import android.content.Context;  
  4. import android.view.View;  
  5.   
  6. public class MyView extends View {  
  7.   
  8.     public MyView(Context context) {  
  9.         super(context);  
  10.         // TODO Auto-generated constructor stub  
  11.     }  
  12. }  
运行一下工程,那么工程立即崩溃了,报错也很清晰明了:

09-17 06:52:24.389: E/AndroidRuntime(1563): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]

表示没有找到某个带两个参数的构造方法,于是,知道自定义属性必须得复写父类的另外一个构造方法,修改如下:

[java]  view plain copy print ?
  1. package com.example.myattrs;  
  2.   
  3. import android.content.Context;  
  4. import android.util.AttributeSet;  
  5. import android.view.View;  
  6.   
  7. public class MyView extends View {  
  8.   
  9.     public MyView(Context context, AttributeSet attrs) {  
  10.         super(context, attrs);  
  11.   
  12.         int count = attrs.getAttributeCount();  
  13.         for (int index = 0; index < count; index++) {  
  14.             String attributeName = attrs.getAttributeName(index);  
  15.             String attributeValue = attrs.getAttributeValue(index);  
  16.             System.out.println("name:" + attributeName + "  value:" + attributeValue);  
  17.         }  
  18.     }  
  19.   
  20. }  
打印结果如下:


AttributeSet:对布局文件XML解析后的结果,封装为AttributeSet对象。存储的都是原始数据,但是对数据进行了简单的加工。

由此构造器帮我们返回了布局文件XML的解析结果,拿到这个结果,我们该怎么做呢?接下来,我们来看看View类对于这个是怎么处理的:

[java]  view plain copy print ?
  1. public View(Context context, AttributeSet attrs) {  
  2.         this(context, attrs, 0);  
  3.     }  
[java]  view plain copy print ?
  1. public View(Context context, AttributeSet attrs, int defStyle) {  
  2.         this(context);  
  3.   
  4.         TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.View,  
  5.                 defStyle, 0);  
于是,找到一个跟属性很相关的类TypeArray,那么接下来,我在自定义控件的构造方法上也获取一下TypeArray这个类:

翻看一下TypeArray的源码会发现,TypeArray是不继承任何类(除了Object)的,也就是说,TypeArray相当于一个工具类,通过context.obtainStyledAttributes方法,将AttributeSet和属性的类型传递进去,比如AttributeSet相当于原材料,属性类型相当于图纸,context.obtainStyledAttributes相当于加工厂加工成所对象的属性,封装到TypeArray这个类里。

[java]  view plain copy print ?
  1. package com.example.myattrs;  
  2.   
  3. import android.content.Context;  
  4. import android.content.res.TypedArray;  
  5. import android.util.AttributeSet;  
  6. import android.view.View;  
  7.   
  8. public class MyView extends View {  
  9.   
  10.     public MyView(Context context, AttributeSet attrs) {  
  11.         super(context, attrs);  
  12.   
  13.         TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyView);  
  14.         int count = ta.getIndexCount();  
  15.         for (int i = 0; i < count; i++) {  
  16.             int itemId = ta.getIndex(i);  
  17.             System.out.println("itemId::" + itemId); // 获取属性在R.java文件中的id  
  18.             switch (itemId) {  
  19.             case R.styleable.MyView_test_bitmap:  
  20.                 int bitmapId = ta.getResourceId(itemId, 100);  
  21.                 System.out.println("bitmapId::" + bitmapId);  
  22.                 break;  
  23.             case R.styleable.MyView_test_id:  
  24.                 int test_id = ta.getInteger(itemId, 10);  
  25.                 System.out.println("test_id" + test_id);  
  26.                 break;  
  27.             case R.styleable.MyView_test_msg:  
  28.                 String test_msg = ta.getString(itemId);  
  29.                 System.out.println("test_msg::" + test_msg);  
  30.                 break;  
  31.             default:  
  32.                 break;  
  33.             }  
  34.         }  
  35.     }  
  36.   
  37. }  

以下是TypeArray类里的方法,这里不写注释了,见名知意:


当在构造方法中获取到这些设置好的属性值时,取出其值,就可以在代码中进行处理了。

上篇博客提到了Android自定义控件——仿ios的滑动开关按钮,接下来,就要为这个滑动开关按钮条件自定义的属性,不熟悉上篇博客Demo的,可以先去浏览器一下我的上篇博客,点这里Android自定义控件——仿ios滑动开关按钮

首先,按照上面介绍的步骤,先在res/values目录下创建一个属性文件attrs.xml:

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   
  4.     <declare-styleable name="MyToggleBtn">  
  5.   
  6.         <!-- 滑动按钮背景图片 -->  
  7.         <attr name="switchBG" format="reference" />  
  8.         <!-- 滑动块图片 -->  
  9.         <attr name="slideBg" format="reference" />  
  10.         <!-- 设置当前的状态 -->  
  11.         <attr name="currState" format="boolean" />  
  12.     </declare-styleable>  
  13.   
  14. </resources>  
然后,在引用自定义控件的布局文件acticity_main.xml上设置自定义属性,记住,引用这些属性之前,必须先引用命名空间:

xmlns:mytogglebtn="http://schemas.android.com/apk/res/com.example.slidebutton"

其中:mytogglebtn 是任意取名,没有强制要求,但是在控件中引用属性的时候,要保持一致,不要写错了

          com.example.slidebutton 是工程的包名,千万不要弄错了,不然找不到属性文件

[html]  view plain copy print ?
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     xmlns:mytogglebtn="http://schemas.android.com/apk/res/com.example.slidebutton"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent" >  
  6.   
  7.     <com.example.slidebutton.view.SlideButton  
  8.         android:id="@+id/slidebutton"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_centerInParent="true"  
  12.         mytogglebtn:currState="false"  
  13.         mytogglebtn:slideBg="@drawable/slide_button_background"  
  14.         mytogglebtn:switchBG="@drawable/switch_background" />  
  15.   
  16. </RelativeLayout>  
有了上面的步骤,我们就可以自定义组件类的构造方法中,将属性集解析成TypeArray了,从TypeArray中获取相关的属性值,并用于初始化自定义控,以下是主要代码:

[java]  view plain copy print ?
  1. public SlideButton(Context context, AttributeSet attrs) {  
  2.         super(context, attrs);  
  3.   
  4.         // 获得自定义属性  
  5.         TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyToggleBtn);  
  6.   
  7.         int count = ta.getIndexCount();  
  8.         for (int i = 0; i < count; i++) {  
  9.             int itemId = ta.getIndex(i); // 获取某个属性的Id值  
  10.             switch (itemId) {  
  11.             case R.styleable.MyToggleBtn_currState: // 设置当前按钮的状态  
  12.                 currentState = ta.getBoolean(itemId, false);  
  13.                 break;  
  14.             case R.styleable.MyToggleBtn_switchBG: // 设置按钮的背景图  
  15.                 int backgroundId = ta.getResourceId(itemId, -1);  
  16.                 if (backgroundId == -1)  
  17.                     throw new RuntimeException("资源没有被找到,请设置背景图");  
  18.                 switchBG = BitmapFactory.decodeResource(getResources(), backgroundId);  
  19.                 break;  
  20.             case R.styleable.MyToggleBtn_slideBg: // 设置按钮图片  
  21.                 int slideId = ta.getResourceId(itemId, -1);  
  22.                 if (slideId == -1)  
  23.                     throw new RuntimeException("资源没有找到,请设置按钮图片");  
  24.                 slideButtonBG = BitmapFactory.decodeResource(getResources(), slideId);  
  25.                 break;  
  26.             default:  
  27.                 break;  
  28.             }  
  29.         }  
  30.     }  

        从上可以看到,自定义属性其实很简单。就是在构造方法中,将获取到的属性集加工成TypeArray对象,通过这个对象取出属性的id,通过id取出每个属性对应的值(毕竟Android下的布局文件XML也是key-value形式的),最后将获取到的属性值(控件用户自定义的数据)初始化到自定义控件上,这样,一个完整的自定义控件就完成。这种完整的自定义控件方式用的并不多见,因为在开发自定义控件时候,需要什么数据就直接在Java代码里设置就好了,方便多了。但是在特定的场合下,如果开发的控件某些数据不确定,或者所开发控件需要提供给其他人进行偏好设置什么的,这种自定义属性就显得非用不可了。

Android:自定义控件 阅读详情

相关推荐

破解拼多多网页字体加密的Python实现(静态)

爬取或者复制粘贴出来发现数字不是6372,而是这样的一个东西 ""从上图我们可以看出数字是一行的空白,后面被浏览器渲染后才展现的数字。我们可以用这个代码查看十六位进制对应的十进制,为什么要看十进制呢?​,而字体文件中的字符映射关系(cmap)也是以十进制存储的。我们搜索这个属性我们可以看到第一个这样的属性有一个URL,这个就是解密的字体包。然后我们构造一个这样的映射字典 key就是对应的十进制,后面的值就是对应的数字。然后我们需要封装一个函数,将加密文字和映射字典传入,返回解密后的数字。

weixin_64179111的博客 3539

安卓 控件的AttributeSet

在接触控件中,常常可以看到AttributeSet attrs这个参数。例:    TextView(Context context, AttributeSet attrs, int defStyleAttr)      举例:        android:layout_height="wrap_content"      android:text="@string/hello"

刘米雪的博客 6429

solidworks vba二次开发配合问题

solidworks vba二次开发配合问题二次开发装配的步骤 二次开发装配的步骤 solidworks可以使用宏录制配合过程从而得到配合的vba代码,步骤如下: 1.选择两个配合的面(点、线等) 2. 建立配合 例如将两个圆柱面同心(图中高亮): 配合后 我们看一下宏录制的代码: Sub main() //激活solidworks接口 Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc //选择两个圆柱面,注意此处是根据坐标选择,不

Alejandro123的博客 3404

Android自定义View(三)自定义属性AttributeSet

自定义View的时候通常需要提供一些自定义属性,自定义属性非常简单,只需要在res资源目录的values目录下创建一个attrs.xml的属性定义文件,然后在该文件中定义相应的属性,并在自定义View的构造函数中获取并设置自定义属性的默认值即可。 假设在attrs.xml中自定义如下属性: <declare-styleable name="Custo...

xuzhb 5315

硬件电路(22)-TTL和232切换电路

工作中会遇到TTL和232电平的通信的状态,为了实现一种便捷的切换方式,参考了一些文章,提供一种电路方便大家使用。

剑藏锋的博客 1862

LinuxCNC---在PC端显示开发板LinuxCNC界面

  今天在调试开发板时,执行开发板上的linuxcnc指令,总是出现如下报错 LINUXCNC - 2.9.0~pre0 application-specific initialization failed: couldn't connect to display "192.168.137.3:1" Error in startup script: invalid command name "image" while executing "image create photo -file $f/$i

中华田园巨龙 3469

android中attributeset参数

getAttributeListValue(String namespace, String attribute, String[] options, int defaultValue):返回给定命名空间和属性名的列表属性值,从预定义的选项中匹配,若无匹配则返回defaultValue。getAttributeIntValue(String namespace, String attribute, int defaultValue):返回给定命名空间和属性名的整型属性值。

sun13047140038的博客 1391

STM32cubeMX配置FreeRTOS软件定时器

文章目录前言1.软件定时器概述一.软件定时器特性二、使用cubeMX生成软件定时器总结 前言 本文主要带大家了解什么是软件定时器,并且带大家使用cubeMX配置软件定时器。 1.软件定时器概述 一.软件定时器特性 软件定时器就是一个闹钟当时间到了就执行相对应的任务或者代码。软件定时器是基于系统滴答中断的。在FreeRTOS中我们可以设置无数个软件定时器。 指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期 (period)。 指定类型定时器有两种类型: 1.一次性 这类定时器启动后,它的回调函

m0_49476241的博客 6949

自定义控件属性 android,Android 自定义控件属性赋值

1. 自定义属性attrs.xml文件,在AttrAssignTextView中定义了5个属性,并且定义了一个单独的attrAssignStyle,用于后面的定义。2. 属性赋值布局文件中直接定义自定义style,在布局文件中指定View的stylestyle.xml文件自定义主题theme3. 自定义控件自定义控件AttrAssignTextViewpublic class AttrAssign...

weixin_42551028的博客 596

uniapp:人脸识别功能,已测试,直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。

uniapp人脸识别功能,已测试可直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。 APP效果图:

sunluyi的博客 2225

OmniDrive(3):逐行代码详解

模型效果: 端到端联合规划与推理 接下来,简单介绍下训练的配置 1.1 模型配置 模型基于sparse query based的3D Bev感知框架StreamPetr ,用query来编码动态目标(如车辆、行人)和静态地图元素(如车道线)。(1) tran、test和val数据配置 指定真值的文件路径: ann_file 指定输出处理的pipeline: 训练使用, test 和val使用 指定是否需要时序训练seq_mode (2)数据处理pipeline 自定义的Dataset 通过类实现,训

@bangbang的博客 719

Android开发技巧——自定义控件之自定义属性

Android开发技巧——自定义控件之自定义属性掌握自定义控件是很重要的,因为通过自定义控件,能够:解决UI问题,优化布局性能,简化布局代码。上一篇讲了如何通过xml把几个控件组织起来,并继承某个ViewGroup子类,把它们封装起来使用。这是我们接触到的最简单的一种自定制控件了。但许多时候,我们还需要在布局文件中使用它们的时候,能通过属性传入一些值,来影响最终的显示结果。我们在做项目中经常会遇到的

一个码农的博客 6355

5步VS传统WinForm!AntdUI让界面设计从“土味”到“超模”只需30秒?

摘要:墨瑾轩编程教程《AntdUI的5大魔法步骤》详解如何将传统WinForm升级为现代化UI。教程通过5个核心步骤:安装AntdUI库、控件替换、主题定制、复杂布局构建及实战案例演示,对比传统开发与AntdUI在美观度(动态阴影/动画)、开发效率(拖拽组件VS手工绘制)和主题定制(一键换肤VS重写控件)的显著差异。使用C#代码示例展示按钮动画、3D翻转、聊天界面等特效实现,帮助开发者快速掌握这一基于Ant Design风格的WinForm增强框架。(150字)

java专栏 1128

Android 控件自定义属性三部曲

首先,你需要在res/values目录下创建一个XML文件,通常命名为attrs.xml,用于定义自定义属性。假设我们要为一个自定义的TextView控件添加自定义属性,比如customTextColor和customTextSize。

结合项目案例,记录点点滴滴,自己回顾,分享他人o__o 8975

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

蓝牙模块HM-10手册

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

Android 自定义控件——自定义属性

本文介绍在 Android 当中自定义控件使用自定义属性 本文以下图为例进行讲解   如图: 一个圆,我们自定义一个View ,以画一个圆为例,以圆的半径、颜色、透明值 作为自定义属性来进行讲解 先定义自定义的View,继承View,重载其三个构造方法   Circle.java  一般我们的自定义属性也是在重载的构造方法中进行初始化,初始化之前我们需要事先定义好属性文件,也

顾明伟 2437

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 动态设置控件属性,Android中自定义控件属性TypedArray

我们在自定义控件的时候,通常需要定义一些属性提供给用户,类似于一个接口,方便用户直接在xml文件中直接设置某些属性的值。一、在attrs中自定义属性在res/values下的atts.xml中定于你需要的属性。如果没有这个文件,那么就需要你在values下新建一个attrs.xml资源文件这个attrs.xml文件内容通常是下面这种格式: ?? 中给自己定义的属性所应用的控件起一个名字,这个名字用...

weixin_34355337的博客 1008

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android 自定义控件属性

相关文章 Android 自定义控件属性 前言 自定义控件经常需要一些特殊的配置,添加一些自定义属性。 1. 自定义属性 (1) attrs.xml文件 所有自定义属性需要在文件中添加declare-styleable节点来声明,定义属性background_color设置背景色。 &amp;amp;amp;amp;amp;lt;declare-styleable name=&amp;amp;amp;amp;quot;AttrDeclareView&amp;amp;am

假装你是大灰狼的专栏 4168

初学android-自定义控件以及控件属性

自定义控件以及自定义控件属性 一.自定义控件                                                             1.为什么要用自定义控件? 我们所有的控件都是直接或者简介继承自view,所用的布局都是直接或者间接继承自ViewGroup的。View是android中最基本的UI组件,他可以在屏幕上绘制一块矩形区域,并且能

lz_zl_的博客 421

android中控件属性往往,详解Android自定义控件属性

在android开发中,往往要用到自定义的控件来实现我们的需求或效果。在使用自定义控件时,难免要用到自定义属性,那怎么使用自定义属性呢?在文件res/values/下新建attrs.xml属性文件,中定义我们所需要的属性。public class customtextview extends textview {private int textsize;//自定义文件大小private int t...

weixin_39948210的博客 110

android 控件自定义属性,Android自定义控件属性

在项目开发的过程中,有一个线性布局在很多地方都使用到了,但是其中的内容又有不同之处,如果每次都写一个布局会产生很多重复多余的代码,使用include包含代码也考虑过,但是也有一些局限性,因此,最后使用了自定义布局。先来看下实际的效果图 下面就来详细说下整个过程。先来看下基础的线性布局:线性布局左边是一个ImageView 然后是一个textView 然后是一个textview 一个image...

weixin_29196613的博客 638

Android读取系统控件的自定义属性

读取自定义属性 通常读取自定义控件的自定义属性是在自定义控件的构造函数中用context的obtainStyledAttributes方法获取TpyeArray对象,通过TpyeArray对象获取个自定义属性,最后别忘了recycle()。 attrs.xml 自定义控件 public MyViewGroup(Conte

znvoid的博客 1473

安卓自定义控件,自定义控件属性

定义一个自己定制的控件,如下图的:![画一个有背景色的圆,圆中间可以输入文字](http://img.blog.csdn.net/20161027110545133) view的绘制离不开三个方法,onMeasure、layout(子方法onLayout)、draw(子方法onDraw),onMeasure测量控件大小,layout计算控件在屏幕的位置,draw绘制控件,想要自己的控件有什么形状,颜

loren的博客 351

Android自定义控件提供颜色属性动态改变控件颜色

Android自定义控件提供颜色属性动态改变控件颜色 因为按钮的样式都是用xml文件实现的,因此颜色也是指定好的。后来想着别人要使用你的控件,颜色肯定需要和他们自己的应用搭配,所以如果要做好就需要提供一个属性,可以让使用者指定控件的主要颜色。

Shirley0207的博客 1万+

Android自定义控件之自定义属性

Android自定义控件之自定义属性 一、自定义控件步骤 1.自定义属性 2.重写onMeasure 3.重写onLayout 4.重写onDraw 今天这篇博客主要介绍第一步自定义属性,通过一个案例来进行讲解 案例的效果如下 即我们通过自定义View画一个圆,其中可以控制圆的半径大小和颜色,具体怎么做的呢? 二、自定义属性步骤 1.首先在res/values/目录下创建attr文件,如下所示 <declare-styleable name="CircleView"> <a

乐于分享,乐于讨论,欢迎大家积极讨论 1669

android 自定义控件属性

android 自定义控件属性

zhouguizhi 6784

安卓自定义控件自定义属性的使用

首先在文件中定义属性集合(),支持多种属性类型(如stringcolordimension等)。xml-- 定义自定义属性集合,name与控件类名一致(非强制,建议统一) -->-- 示例属性:文本内容 -->-- 示例属性:文本颜色 -->-- 示例属性:文本大小 -->-- 示例属性:自定义枚举 --></attr>-- 示例属性:引用资源(如drawable) -->属性类型(format)说明string:字符串color:颜色值(如#FF0000dimension:尺寸(如。

weixin_44893833的博客 474
上一篇: 接口的回调2-Android学习
下一篇: Android自定义控件之会缩放的GridView
Leafact
博客等级 码龄14年 20粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值