前言
说到自定义控件,随便百度一下,都是继承View或者ViewGroup,然后重写onMeasure,onLayout,onDraw,其实实战开发中有更简单快捷的方法,那就是直接继承XXXLayout,然后导入xml布局,下面我将用一个实例来讲解。
这一节会讲到知识点有:
1.如何快速、简单自定义控件(完全不需要重写onDraw,onMeasure,onLayout哦!)
项目目标
现在要求实现一种自定义键盘,效果如图:
这个键盘一般用于用遥控器控制的键盘,可以看到这个键盘比较特殊的地方就是展开后是一个圆盘状的小键盘,首先我们就对这个圆盘小键盘先进行自定义。
自定义圆盘按键
自定义布局
根据圆盘的布局,我准备采用LinearLayout,分三行,中间一行又是三列,除了最中间的是Button,其他都是TextView。(布局文件又臭又长,我就只讲思路,不贴代码了。)布局文件取名为custom_keyboard_item_circle.xml
然后新建一个类,取名为CustomCircleKeyboardItem.java,继承LinearLayout,重写它的构造方法,其实就是在原来的构造方法之后加上我们的自定义功能:
public CustomCircleKeyboardItem(final Context context, final AttributeSet attrs, final int defStyle) {
super(context, attrs, defStyle);
load();
}
public CustomCircleKeyboardItem(final Context context, final AttributeSet attrs) {
super(context, attrs);
load();
}
public CustomCircleKeyboardItem(final Context context) {
super(context);
load();
}
可以看到我只是在每个构造方法后都加了一个方法load()。下面看load里面:
private void load() {
if (isInEditMode()) {
return;
}
inflateLayout();
initUI();
initData();
}
load里面很简单,三个方法,第一个是引入本类对应的布局,这样可以少写很多代码,不用用代码去写添加各种view;第二个方法是初始化UI,在这里得到想要控制的UI及设置一些初始状态;第三个方法是初始化一些初始数据。(这样的分类完全是个人习惯,可以不用照搬。)
现在,我们只要实现第一个方法就可以,把刚刚写好的布局文件加进来:
/**
* @Description inflate the main layout
*/
private vo