Android实现自定义属性

一、自定义ViewGroup

1、onMeasure

决定内部View(子View)的宽度和高度,以及自己的宽度和高度

2、onLayout

决定子View放置的位置

3、onTouchEvent

定义动作

二、自定义属性

在实际的使用自定义Viewgroup时,经常会用到自定义控件的属性。

在res/values文件夹下建立attr.xml文件

1、书写xml文件,定义<attr>中的自定义属性,在<declare-stableable>中声明已经定义的属性

2、使用自定义的属性,在使用时添加命名空间,xmlns:ren="http://schemas.android.com/apk/res/bupt.ren.slidingmenu",然后即可以使用该属性

注:其中bupt.ren.slidingmenu是应用程序的包名,不是view所在的路径。

三、使用自定义的ViewGroup和自定义布局属性

1、自定义布局属性

attr.xml中定义如下:

<resources>
    <attr name="rightPadding" format="dimension"></attr>  //定义布局属性
    <declare-styleable name="SlidingMenu"> //定义布局,其中name后必须跟着view的类名
        <attr name="rightPadding"></attr>   //声明属性
    </declare-styleable>
</resources>

2、使用自定义布局属性

使用时,在main.xml定义如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ren="http://schemas.android.com/apk/res/bupt.ren.slidingmenu"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <bupt.ren.slidingmenu.view.SlidingMenu
        android:id="@+id/id_menu"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/img_frame_background"
        ren:rightPadding="80dp" >
    </bupt.ren.slidingmenu.view.SlidingMenu>

</RelativeLayout>

3、自定义ViewGroup

在使用自定义属性时,需要覆写ViewGroup中有2个参数的构造方法,然后通过含有2个参数的构造方法,调用含有3个参数的构造方法。含有3个参数的构造方法负责接收自定义属性。

public SlidingMenu(Context context, AttributeSet attrs, int defStyle)
{
     super(context, attrs, defStyle);
     TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
               R.styleable.SlidingMenu, defStyle, 0);

     int n = a.getIndexCount();
     for (int i = 0; i < n; i++)
     {
          int attr = a.getIndex(i);
          switch (attr)
          {
          case R.styleable.SlidingMenu_rightPadding:
               mMenuRightPadding = a.getDimensionPixelSize(attr,
                         (int) TypedValue.applyDimension(
                                   TypedValue.COMPLEX_UNIT_DIP, 50, context
                                             .getResources().getDisplayMetrics()));
               break;
          }
     }
     a.recycle();  //需要对TypeArray进行回收
}

获取自定义的属性,其中关键的步骤就是获取mMenuRightPadding这个参数,达到控制控件布局的效果。

得到mMenuRightPadding这个参数后,就可以再ViewGroup中的onMeasure的方法中对子View进行布局的操控。

1.转载注明:http://www.cnblogs.com/yuanblog/p/4439186.html

2.本文为个人笔记、心得,可能引用其它文章,所以博客只在私自范围内供大家学习参考。

时间: 2024-10-25 07:30:40

Android实现自定义属性的相关文章

Android中自定义属性(attrs.xml,TypedArray的使用)

做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方提供的那些组件一样用xml来定义他的属性呢?现在我们就来讨论一下他的用法.1.添加文件attrs.xml,位于res\values目录下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <resources>

Android中自定义属性基本步骤

Android中自定义属性基本步骤 这次只是说明最简单的自定义属性流程 1. 创建资源文件: resources/attr.xml <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="test"> <attr name="test" format="string" /

关于Android attrs 自定义属性的说明

写个自定义控件时经常要自定义一些自己的属性,平时用的都是那几个,今天就顺便一起总结一下这个东东吧- 一.定义:属性的定义都在attrs.xml文件里面: 二.读取:通过都是通过TypedArray去读取的,要获取TypedArray都是通过context.obtainStyledAttributes去获取的,它有几个重载方法,一般形如: TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.Custom

Android之自定义属性

有些时候会觉得Android中提供的控件不能满足项目的要求,所以就会常常去自定义控件.自定义控件就不免会自定义属性.自定义属性大致需要三个步骤:在XML文件中定义自定义属性的名称和数据类型.在布局中调用自定义属性.在代码中获取自定义属性.下面来详细的解析一下这三个步骤. 一.在XML文件中定义自定义属性的名称和数据类型 在项目的res/values文件夹下新建一个attrs.xml的文件,在文件中设置自定义属性的名称和类型.代码如下: 1 <?xml version="1.0"

Android中自定义属性的格式详解

自定义属性格式一共有十种: 1. reference:参考某一资源ID. 2. color:颜色值. 3. boolean:布尔值. 4. dimension:尺寸值. 5. float:浮点值. 6. integer:整型值. 7. string:字符串. 8. fraction:百分数. 9. enum:枚举值. 10. flag:位或运算. 1. reference:参考某一资源ID. (1)属性定义: <declare-styleable name = "名称">

Android中自定义属性的使用

做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方提供的那些组件一样用xml来定义他的属性呢?现在我们就来讨论一下他的用法. 一.在res/values文件下定义一个attrs.xml文件,代码如下: <?xml version="1.0" encoding="utf-8"?> <resources&

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

转载请注明出处:http://blog.csdn.net/allen315410/article/details/39343401 我们在自定义android组件的时候,除了用Java构建出组件的样子外,有时候还需要去申明一些"属性"提供给项目使用,那么什么是组件的属性呢? 例如在清单文件中,创建一个TextView的时候,这是需要制定TextView的android:layout_width="wrap_content" android:layout_height

Android自定义属性:attr.xml 与 TypedArray

1.attr.xml <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView"> <attr name="textColor" format="color" /> <attr name="textSize" format=&q

Android自定义属性

找到 "D:\eclispe_android\eclipse_en_32_4.4\sdk\platforms\android-22\data\res\values" Android SDK自带的属性文件,截取一段Android的自定义属性: <declare-styleable name="TextView"> <!-- Determines the minimum type that getText() will return. The defa