[Android] 有关自定义view的讨论

感觉自定义view还是很有用的  大家有什么心得体会 或者 问题 都提出来讨论下啦 
先 抛个问题  :我研究了一下自定义view  一直没搞懂 自定义里面的构造方法会执行么??(当我没有在代码里实例化这个view时,只是在布局文件里引用)
比如api demo里的LabelView 例子里的构造方法
  1. public LabelView(Context context, AttributeSet attrs) {
  2.         super(context, attrs);
  3.         initLabelView();

  4.         TypedArray a = context.obtainStyledAttributes(attrs,
  5.                 R.styleable.LabelView);

  6.         CharSequence s = a.getString(R.styleable.LabelView_text);
  7.         if (s != null) {
  8.             setText(s.toString());
  9.         }

  10.         // Retrieve the color(s) to be used for this view and apply them.
  11.         // Note, if you only care about supporting a single color, that you
  12.         // can instead call a.getColor() and pass that to setTextColor().
  13.         setTextColor(a.getColor(R.styleable.LabelView_textColor, 0xFF000000));

  14.         int textSize = a.getDimensionPixelOffset(R.styleable.LabelView_textSize, 0);
  15.         if (textSize > 0) {
  16.             setTextSize(textSize);
  17.         }

  18.         a.recycle();
  19.     }
复制代码
构造方法会执行 , 执行先后遵循继承关系。

弱弱的问一句 这个接口AttributeSet 是用来解析attrs.xml的么??
public final TypedArray obtainStyledAttributes(
            AttributeSet set, int[] attrs)
这个方法的第二个参数怎么理解???

是的,它主要的作用是可以实现加载在布局XML里边自定义的属性,比如说你用的系统控件属性都是
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />

如果你自定义控件就可以自定义属于你的控件属性,像这样
<com.rocky.attrs.Textbox android:id="@+id/ss"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        rocky:Text="fdsafda" rocky:Oriental="Vertical"></com.rocky.attrs.Textbox>

来源:麦可网论坛


你可能感兴趣的:(android,view)