自定义属性基础

  • 自定义属性的步骤
  1. 在res/values/目录下创建attrs.xml文件
  2. 在attrs.xml文件中编写自定义属性
    例如:

        
        
        
        
        
        
        
        
        
    

name="ViewfinderView ViewfinderView是自定义控件的类

  1. 在layout布局中设置这些属性。别忘记定义xmlns:app="http://schemas.android.com/apk/res-auto"

  1. 在自定义类中通过对象,来获取在layout布局中设置的属性值
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.ViewfinderView);
    laserColor = array.getColor(R.styleable.ViewfinderView_laser_color, 0x00FF00);
    cornerColor = array.getColor(R.styleable.ViewfinderView_corner_color, 0x00FF00);
    frameColor = array.getColor(R.styleable.ViewfinderView_frame_color, 0xFFFFFF);
    resultPointColor = array.getColor(R.styleable.ViewfinderView_result_point_color, 0xC0FFFF00);

namespace命名空间

http://schemas.android.com/apk/res-auto这个是自定义属性的命名空间。app开头。
http://schemas.android.com/apk/res/android 是系统默认的namespace,以android:开头

obtainStyledAttributes 方法

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DragGridView);

返回在此context的主题中检索样式的属性信息。

  • 源码
public final TypedArray obtainStyledAttributes(
            AttributeSet set, @StyleableRes int[] attrs) {
        return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
    }

调用的是Theme中的方法。

Theme.obtainStyledAttributes
public TypedArray obtainStyledAttributes(AttributeSet set,
                @StyleableRes int[] attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) 

返回一个包含属性值数组的TypedArray。一定要调用TypedArray.recycle(),其中包含attrs中的属性值列表,如果给定的AttributeSet指定了一个样式类,该样式将被应用在它定义的基础属性之上。

当获取完想要的数据时,一定要调用TypedArray#recycle方法
要确定一个属性的值时,一般需要4个参数

  1. 给定AttributeSet中的任何属性值。
  2. 在AttributeSet(名为“style”)中指定的样式资源
  3. defStyleAttr 和 defStyleRes 指定默认的样式。
  4. 主题的基础值

TypeArray只是一个容器,用于存储attrs中的自定义属性。

你可能感兴趣的:(自定义属性基础)