组合自定义控件

自定义控件一般包括三种:
1、继承某一个现有的控件,进行方法扩展和功能扩展,如跑马灯的TextView,圆形的ImageView等等。
2、完全继承于view或viewGroup的自定义控件,如前几年流行的SlidingMenu这种难度最大,掌握后技术大大提高。
3、继承五大布局中的一个,进行组合控件,把几个分散的控件按照一定的布局组合为一个完整的组件,常遇到的比如app的title,一般包括返回键、标题名、确定键。
今天要说的就是第三种自定义控件。简单的控件只是组合一下就行了,进一步就是要写一些点击的回调事件,再进一步就是自定义一些属性,应用到控件里面。


组合控件A有四个构造方法,每个都与自己的用法。
当new一个控件对象时,比如A a = new A();此时调用的就是一个参数的构造方法。
如果在布局里定义view对象,则此时调用两个参数的构造方法。
如果自定义了style的属性,则此时调用三个参数的构造方法。


写组合控件时,写一个类,继承LinearLayout  RelativeLayout
在构造方法里,通过布局转换器LayoutInflater获取到layout的布局,转换为View对象,此时layout的xml布局的根节点容器要与继承的LinearLayout 或 RelativeLayout相对应。
在构造器里调用View view = View.inflate(context, R.layout.setting_view, this);或者View view = View.inflate(context, R.layout.ui_setting_view,null);this.addView(view);
此时就可以显现出一个雏形。只有UI界面显示。
如果通过相对view添加点击事件,可以通过TextView title = (TextView) view.findViewById(R.id.tv_title);找到title后,直接
title.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

}
});


如果控件牵涉到一些UI界面,需要写回调接口,然后设置给view
OnClickListener mClickListen;
public void setmClickListen(OnClickListener mClickListen) {
this.mClickListen = mClickListen;
}


title.setOnClickListener(mClickListen);


如果android系统提供的属性不够用,那么就要仿照Android系统属性一样自定义属性,自定义时需要先添加属性的命名空间,声明自定义的属性。比如

       
       
       

   

此时可以观察R文件,生成attr内部类,生成styleable数组,里面会有attrs的数组,名字为styleable和attr的组合体。


在引用控件的地方像用系统属性一样加入自定义属性,同时在根节点加入
xmlns:it="http://schemas.android.com/apk/res/包名"
这样可以用自定义属性 it:title="显示设置"等


在自定义控件里
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.SettingView);
布局里拿到 a,然后
String title = a.getString(R.styleable.SettingView_title);拿到写入xml中的文字信息,最后 回收 a, a.recycle();这样就初步完成了。
如果想要对控件做些什么操作,可以对外暴露接口,自己内部写好逻辑,供外部调用,如果要与外部交互,那么就用回调call,很好用。



你可能感兴趣的:(Android,控件,Android,知识)