Android -- 深入了解自定义属性 http://www.cnblogs.com/wjtaigwh/p/6594680.html (基础篇)
深入理解Android 自定义attr Style styleable以及其应用 http://www.jianshu.com/p/61b79e7f88fc
Android中View自定义XML属性详解以及R.attr与R.styleable的区别 http://blog.csdn.net/iispring/article/details/50708044
attrs.xml
//在styleable中声明
...
//也可直接声明,这样定义属性存在一个问题:不能通过style或theme设置这个属性的值。
reference, color, boolean, dimension, string
float, integer, fraction, enum, flag, 混合类型
在java代码中获取的方法
private void init(Context context, AttributeSet attrs, int defStyleAttr) {
//获取自定义属性的值
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyTextView2, defStyleAttr, 0);
mText = a.getString(R.styleable.MyTextView2_myText);
mTextColor = a.getColor(R.styleable.MyTextView2_myTextColor, Color.BLACK);
mTextSize = a.getDimension(R.styleable.MyTextView2_myTextSize, 30f);
a.recycle();
...
Log.i(TAG, "mText :" + mText + ",mTextColor:" + mTextColor+ ",mTextSize:" + mTextSize);
}
obtainStyledAttributes函数获取属性
其实我们在前面已经使用了obtainStyledAttributes来获取属性了,现在来看看这个函数的声明吧:
obtainAttributes(AttributeSet set, int[] attrs) //从layout设置的属性集中获取attrs中的属性
obtainStyledAttributes(int[] attrs) //从系统主题中获取attrs中的属性
obtainStyledAttributes(int resId,int[] attrs) //从资源文件定义的style中读取属性
obtainStyledAttributes (AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)//最复杂,请参考原文
一个attr的应用(RecycleView自定义分割线):
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private static final int[] ATTRS = new int[]{
android.R.attr. listDivider
};
...
}