自定义View思想——标题栏自定义

来源:互联网 发布:大学生网络借贷论文 编辑:程序博客网 时间:2024/05/01 14:13

(1)编写好目的布局(XML文件),这里用LinearLayout作为例子

大概布局如下:

<LinearLayout>

<Button>

<TextView>

<RelativeLayout>

.....

就是一个布局中包涵若干个孩子,这里孩子有没有id都不重要,因为实例化的时候是根据控件(孩子)所在的位置来实例化。

(2)定义一个类继承LinearLayout,实现LinearLayout的构造方法,一般情况下实现前三个构造方法就可以了。

其中:

第一个构造方法在创建时调用

第二个方法在实例化时候调用

第三个方法在布局文件使用该类是的时候调用。

在获取上下文环境中一般可以在第三个构造方法中获取,因为为了简单起见,第一个构造方法直接调用第二个构造方法

也就是:

public A (Context context){

this(context,null);

}

public A (Context context ,AttributeSet attrs){

this(context,attrs,null);

}

.....

这些构造方法在系统定义中都是通过放射来实现的。


这样在第三个A中获取context其实就是第一个构造方法调用时传入的上下文。

(3)实例化控件和获得控件引用。

private View Button;

Button=getChildAt(1);//这里button最终继承View,写View会更方便,1代表第几个孩子,这里是按照在布局文件中定义的顺序规定的。

(4)加载完成是的回调:onFinishInflate()

当布局加载完成的时候就会调用这个方法,布局加载完成也就代表着控件可以实例化了,所以控件的实例化一般都是在这个方法中实例化的,

机上面的代码:Button=getChildAt(1);

获取得到这个控件的引用就可以为所欲为了。

(5)注意:自定义了一个View,现在还没有真正的使用,这时就可以更改(1)中定义的布局

比如定义的LinearLayout可以替换成我们自定义的View(继承LinearLayout),这个View本身就是一个LinearLayout。

替换就是将外面一层的LinearLayout关键字替换成这个类名A,一般会带着包名一起调用。


未完待续。。。。。。。




0 0