1. 自定义属性

attrs.xml文件,在AttrAssignTextView中定义了5个属性,并且定义了一个单独的attrAssignStyle,用于后面的定义。

                    

2. 属性赋值

布局文件中直接定义

自定义style,在布局文件中指定View的style

style.xml文件

自定义主题theme

3. 自定义控件

自定义控件AttrAssignTextView

public class AttrAssignTextView extends TextView {    public AttrAssignTextView(Context context) {        this(context, null);    }    public AttrAssignTextView(Context context, @Nullable AttributeSet attrs) {        this(context, attrs, 0);    }    public AttrAssignTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AttrAssignTextView);        String attr1 = a.getString(R.styleable.AttrAssignTextView_attr1);        String attr2 = a.getString(R.styleable.AttrAssignTextView_attr2);        String attr3 = a.getString(R.styleable.AttrAssignTextView_attr3);        String attr4 = a.getString(R.styleable.AttrAssignTextView_attr4);        String attr5 = a.getString(R.styleable.AttrAssignTextView_attr5);        a.recycle();        setText((attr1 != null ? attr1 + "\n" : "")                + (attr2 != null ? attr2 + "\n" : "")                + (attr3 != null ? attr3 + "\n" : "")                + (attr4 != null ? attr4 + "\n" : "")                + (attr5 != null ? attr5 + "\n" : ""));     }}

效果如下,布局文件定义 > style定义 > theme定义

4. defStyleAttr和defStyleRes

使用obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)方法,通过defStyleAttrdefStyleRes来获取默认值。

  • defStyleAttr设置默认值,defStyleAttr是当前Theme中的一个attribute,是指向style的一个引用。重新定义主题attrAssignTheme,添加attrAssignStyle属性,attrAssignStyle必须在attr中定义过。

  • 只指定defStyleAttr

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AttrAssignTextView,        R.attr.attrAssignStyle, 0);

    效果如下,布局文件定义 > style定义 > defStyleAttr定义 > theme定义

  • 只指定defStyleRes

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AttrAssignTextView,         0, R.style.attrAssignDefStyleRes);

    效果如下,布局文件定义 > style定义 > defStyleRes定义 > theme定义

  • 同时指定defStyleAttrdefStyleRes

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AttrAssignTextView,        R.attr.attrAssignStyle, R.style.attrAssignDefStyleRes);

    效果如下,布局文件定义 > style定义 > defStyleRes定义 > theme定义

    虽然attrAssignDefaultStyle中定义了attr5,但其它地方没有定义,attr5为空。

参考资料:http://blog.csdn.net/zq2114522/article/details/53312530

相关文章
Android 自定义控件属性
Android 自定义控件属性format详解
Android 自定义控件属性赋值

更多相关文章

  1. Android判断Activity是否全屏的方式!!!(最全)
  2. Android(安卓)Studio和MAT结合使用来分析内存问题
  3. Android(安卓)自定义View实现动画形式加载环形图
  4. Permission Denial: opening provider 隐藏的android:exported属
  5. [Android(安卓)Studio]设置Button的圆角、点击效果、按钮颜色
  6. Android如何读写CSV文件方法示例
  7. Android封装SDK生成Jar包以及混淆的方法
  8. Android(安卓)Animation动画 本文纯属抄袭 如何雷同本人一概无责
  9. Android获取内部和外部内存空间大小

随机推荐

  1. Android 网络权限配置
  2. Android中字符串的拆分-split
  3. 关于Android 混淆的内容总结
  4. Android:CoordinatorLayout使用详解
  5. Android--边距(margin)与内边距(padding)
  6. 推荐几个比较好的android客户端开发教程
  7. RecycleView 单选 以及多选单选互斥两种
  8. 四十六、android中的Bitmap
  9. 华为3G e220 linux
  10. android 获取图片信息 之 ExifInterface