`
caiwb1990
  • 浏览: 316163 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义属性

阅读更多
在xml 文件里定义控件的属性,我们已经习惯了android:attrs="" ,那么我们能不能定义自己的属性能,比如:test:attrs="" 呢?答案是肯定的.

好了我就不卖关子了,直接进入主题。大致以下步骤:

一、 在res/values 文件下定义一个attrs.xml 文件.代码如下:
    一、在res/values文件下定义一个attrs.xml文件.代码如下:  
    <?xml version="1.0" encoding="utf-8"?>  
    <resources>  
        <declare-styleable name="MyView">  
            <attr name="textColor" format="color" />  
            <attr name="textSize" format="dimension" />  
        </declare-styleable>  
    </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() 方法,为了保持以后使用该属性一致性!


    public MyView(Context context,AttributeSet attrs)  
        {  
            super(context,attrs);  
            mPaint = new Paint();  
              
            TypedArray a = context.obtainStyledAttributes(attrs,  
                    R.styleable.MyView);  
              
            int textColor = a.getColor(R.styleable.MyView_textColor,  
                    0XFFFFFFFF);  
            float textSize = a.getDimension(R.styleable.MyView_textSize, 36);  
              
            mPaint.setTextSize(textSize);  
            mPaint.setColor(textColor);  
              
            a.recycle();  
        }  



MyView.java 全部代码如下:
    package cn.caiwb.attr;  
    import android.content.Context;  
    import android.content.res.TypedArray;  
    import android.graphics.Canvas;  
    import android.graphics.Color;  
    import android.graphics.Paint;  
    import android.graphics.Rect;  
    import android.graphics.Paint.Style;  
    import android.util.AttributeSet;  
    import android.view.View;  
    public class MyView extends View {  
        private Paint mPaint;  
        private Context mContext;  
        private static final String mString = "hig";  
          
        public MyView(Context context) {  
            super(context);  
            mPaint = new Paint();  
        }  
        public MyView(Context context,AttributeSet attrs)  
        {  
            super(context,attrs);  
            mPaint = new Paint();  
              
            TypedArray a = context.obtainStyledAttributes(attrs,  
                    R.styleable.MyView);  
              
            int textColor = a.getColor(R.styleable.MyView_textColor,  
                    0XFFFFFFFF);  
            float textSize = a.getDimension(R.styleable.MyView_textSize, 36);  
              
            mPaint.setTextSize(textSize);  
            mPaint.setColor(textColor);  
              
            a.recycle();  
        }  
        @Override  
        protected void onDraw(Canvas canvas) {  
            // TODO Auto-generated method stub  
            super.onDraw(canvas);  
            //设置填充  
            mPaint.setStyle(Style.FILL);  
              
            //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标  
            canvas.drawRect(new Rect(10, 10, 100, 100), mPaint);  
              
            mPaint.setColor(Color.BLUE);  
            //绘制文字  
            canvas.drawText(mString, 10, 110, mPaint);  
        }  
    }  


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

      xmlns:test ="http://schemas.android.com/apk/res/cn.caiwb.attr "蓝色 是自定义属性的前缀,红色 是我们包名.

main.xml 全部代码如下:
<?xml   
version="1.0" encoding="utf-8"?>  
<LinearLayout   
xmlns:android="http://schemas.android.com/apk/res/android"  
                
xmlns:test="http://schemas.android.com/apk/res/com.android.tutor"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
<TextView    
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    android:text="@string/hello"  
    />  
<cn.caiwb.attr.MyView  
    android:layout_width="fill_parent"   
    android:layout_height="fill_parent"   
    test:textSize="20px"  
    test:textColor="#fff"  
/>  
</LinearLayout> 


分享到:
评论

相关推荐

    propertyGrid动态加载自定义属性

    3. **动态加载属性**: 要让`PropertyGrid`识别并显示这些自定义属性,我们需要创建一个`TypeDescriptor`的子类,并在其中覆盖`GetProperties()`方法,返回包含自定义属性的属性集合。例如: ```csharp public class...

    sharepoint 2010 扩展webpart自定义属性边栏字段

    下面,我们将详细探讨如何在SharePoint 2010中扩展Web Part自定义属性,以实现边栏字段的定制。 1. **理解Web Part属性** - Web Part属性是定义Web Part行为的关键元素,它们可以是任何类型的数据,如字符串、布尔...

    SolidWorks自定义属性之属性标签编制程序[整理].pdf

    SolidWorks自定义属性之属性标签编制程序 SolidWorks中的自定义属性是通过属性标签编制程序来实现的,该程序可以创建零件、装配体、工程图和焊件的自定义属性界面。在本文中,我们将详细介绍属性标签编制程序的...

    android自定义属性(三种方法dome)

    在Android开发中,自定义属性是一项非常重要的技能,它能够帮助开发者实现个性化和高度定制的UI组件。本篇文章将深入探讨三种不同的自定义属性方法,并结合相关博客资源,以`Custom_TextView`为例进行详细解释。 一...

    SolidWorks一键清空自定义属性

    【SolidWorks一键清空自定义属性】 代码在SolidWorks2020版本下编制,在其他版本中使用自行引用运行库(方法:打开SolidWorks→工具→宏→编辑→打开“删除属性.swp”→工具→引用→把丢失项取消勾选,勾选你当前...

    一个关于C# PropertyGrid增加自定义属性的范例。

    这个范例将向我们展示如何扩展`PropertyGrid`的功能,以支持自定义属性。 `PropertyGrid`控件默认会自动显示关联对象的所有公共属性和字段,但如果我们想要添加一些特殊处理,如自定义编辑器、属性标签、图标等,就...

    自定义属性和反射的例子

    在.NET框架中,自定义属性(Custom Attributes)是一种元数据,可以附加到代码的各种元素上,如类、方法、字段等,提供额外的信息用于运行时的处理或代码分析。自定义属性增强了代码的可扩展性和灵活性,使得我们...

    ExtTag,获取HTML自定义属性

    例如,自定义属性可以包含用于控制行为或动态内容的指令,`ExtTag`会解析这些指令并执行相应的动作。 5. **实际应用**:自定义属性常用于AJAX应用、单页应用(SPA)、响应式设计以及任何需要在JavaScript中处理HTML...

    vb自定义属性实例...

    在VB(Visual Basic)编程中,自定义属性是扩展对象功能的一种重要方式。自定义属性允许程序员根据项目需求创建特定的访问器,控制属性的读取、写入甚至执行更复杂的逻辑。本实例将深入探讨如何在VB中实现自定义属性...

    android 自定义控件 自定义属性详细介绍

    通过在该文件中声明自定义属性,我们可以为控件添加新的配置选项。以下是几种常见的属性类型及其用法: 1. **reference**: 这种类型用于引用已存在的资源ID,如颜色、图片等。例如: ```xml ``` 2. **color*...

    android 重写控件添加自定义属性

    在Android开发中,有时我们需要对系统提供的控件进行扩展,以满足特定的需求,这就涉及到控件的重写和自定义属性的添加。本篇将详细讲解如何在Android中实现这一功能。 首先,我们要理解Android控件重写的基本原理...

    自定义winform表单,控件自定义属性,控件定义数据,xml存入

    本项目似乎是一个关于自定义WinForm表单的实例,其中涉及到控件的自定义属性、控件内数据的定义,以及利用XML进行数据的存储和加载。让我们深入探讨这些知识点。 首先,**自定义WinForm表单**是指开发人员根据需求...

    C# 自定义属性在propertyGrid控件中显示 演示demo

    本教程将深入探讨如何在`PropertyGrid`控件中自定义属性的显示方式,以实现更丰富的用户交互体验。 首先,自定义属性是C#中一个强大的特性,允许我们在类中添加元数据,这些元数据可以用来提供额外的信息,如描述、...

    C# 自定义属性编辑器(UITypeEditor )

    本篇将深入探讨如何利用C#实现自定义属性编辑器,并结合UserControl和Component两种方式来实现属性编辑。 首先,理解UITypeEditor的工作原理是至关重要的。UITypeEditor是一个接口,位于System.Drawing.Design命名...

    option自定义属性的用处

    ### option自定义属性的作用及其应用 #### 一、引言 HTML 作为构建网页的基础语言之一,提供了多种标签用于创建动态且丰富的用户界面。其中 `&lt;option&gt;` 标签主要用于 `&lt;select&gt;` 下拉列表中,为用户提供一系列选项...

    事件绑定和自定义属性

    在IT领域,事件绑定和自定义属性是两个关键概念,特别是在构建交互式用户界面时。本文将深入探讨这两个概念,并结合源码分析和工具应用,为开发者提供更全面的理解。 首先,我们来看“事件绑定”。在编程中,事件是...

    spring 自定义属性编辑器

    这篇博客“spring 自定义属性编辑器”可能详细介绍了如何在Spring中创建和注册自定义属性编辑器,以满足特定的业务需求。 首先,了解Spring中的属性编辑器机制。Spring会自动寻找并使用`java.beans.PropertyEditor`...

    jQuery给HTML标签添加自定义属性.zip

    首先,让我们了解一下自定义属性。在HTML5中,允许开发者为元素添加非标准的属性,这些属性通常以"data-"开头,例如"data-value"。这样做是为了保持语义化,同时提供额外的数据存储空间。在jQuery中,我们可以轻松地...

    Android 自定义属性及其引用

    在Android开发中,自定义属性和其引用是提高应用程序可扩展性和灵活性的重要手段。通过创建自定义属性,开发者可以为控件或者布局增加特定的功能,同时保持代码的整洁和模块化。本文将深入探讨Android自定义属性的...

Global site tag (gtag.js) - Google Analytics