Android自定义控件
来源:互联网 发布:闲来麻将服务器源码 编辑:程序博客网 时间:2024/06/06 23:17
01.自定义控件出现的原因:
Android原生的控件(例如:TextView、ImageView、Button、EditText)无法满足实际的用户需求。
需要程序员,拓展原生控件的用法.用于满足目前用户需求。
02.自定义控件的简单分类:
A.继承控件View的自定义控件
B.继承布局ViewGroup的自定义控件
C.继承某些特别的控件实现
一.继承式View的实现步骤:
1.写一个类继承某个控件
public class MarqueeTextView extends TextView{ ... }
2.重写三个构造方法,根据条件实现(这里只是实现了其中两个构造方法)
注意事项:我们可以在构造方法当中,初始化一些固定的,默认的配置信息.
这些配置信息之前是写死在XML的布局文件当中,目前可以固定写死在构造方法当中,
因为只要当前的类被加载,首先执行的就是构造方法
public MarqueeTextView(Context context) {
this(context, null);
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// android:singleLine="true"
setSingleLine();
// android:ellipsize="marquee"
setEllipsize(TruncateAt.MARQUEE);
// android:focusable="true"
setFocusable(true);
// android:focusableInTouchMode="true"
setFocusableInTouchMode(true);
// android:marqueeRepeatLimit="marquee_forever"
setMarqueeRepeatLimit(-1);
}
3.可以重写三个回调的方法【测量】【布局】【绘制】(可不使用)
4.重写某些方法.更改原生的系统配置信息
例如:将跑马灯在EditText抢占焦点或者有警告对话框弹出时候依然能搞跑起来
/**
* 判断控件初始化时是否有焦点
*/
@Override
public boolean isFocused() {
return true;
}
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
if (focused) {
// 有焦点时走父类方法,焦点被抢走时,不去做操作
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
}
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
if (hasWindowFocus) {
// 窗体有焦点时走父类的方法,窗体焦点消失,不去做操作
super.onWindowFocusChanged(hasWindowFocus);
}
}
5.在XML的布局文件当中,定义全路径名称【包名称+类名称】
二.继承布局ViewGroup的自定义控件 俗称【组合式自定义控件】
继承常见的ViewGroup类实现自定义控件:
ViewGroup就是指的一般的布局
【线性布局 LinearLayout】
【相对布局 RelativeLayout】
【帧布局 FrameLayout】
使用组合自定义控件的好处:
对于布局类型相同的代码,如果想要动态的去修改内容.可以采用组合式自定义控件.
这样操作,能够极大的缩减布局XML冗余的代码编写。
组合式自定义控件的编写步骤说明:
1.抽取一个布局文件,作为打气筒布局.【当前的这个布局是公共部分布局】
2.写一个类.继承ViewGroup或者ViewGroup的子类
3.重写三个构造方法
4.在构造方法当中,采用打气筒去填充此时此刻的视图
5.可以在构造方法.这里去关心控件,关心来自于打气筒布局里面的控件对象
6.接下来.就可以对于关心的控件设置各自的属性了
7.对于需要使用自定义控件的布局.设置全路径名称【包名称+类名称】
Android原生的控件(例如:TextView、ImageView、Button、EditText)无法满足实际的用户需求。
需要程序员,拓展原生控件的用法.用于满足目前用户需求。
02.自定义控件的简单分类:
A.继承控件View的自定义控件
B.继承布局ViewGroup的自定义控件
C.继承某些特别的控件实现
一.继承式View的实现步骤:
1.写一个类继承某个控件
public class MarqueeTextView extends TextView{ ... }
2.重写三个构造方法,根据条件实现(这里只是实现了其中两个构造方法)
注意事项:我们可以在构造方法当中,初始化一些固定的,默认的配置信息.
这些配置信息之前是写死在XML的布局文件当中,目前可以固定写死在构造方法当中,
因为只要当前的类被加载,首先执行的就是构造方法
public MarqueeTextView(Context context) {
this(context, null);
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// android:singleLine="true"
setSingleLine();
// android:ellipsize="marquee"
setEllipsize(TruncateAt.MARQUEE);
// android:focusable="true"
setFocusable(true);
// android:focusableInTouchMode="true"
setFocusableInTouchMode(true);
// android:marqueeRepeatLimit="marquee_forever"
setMarqueeRepeatLimit(-1);
}
3.可以重写三个回调的方法【测量】【布局】【绘制】(可不使用)
4.重写某些方法.更改原生的系统配置信息
例如:将跑马灯在EditText抢占焦点或者有警告对话框弹出时候依然能搞跑起来
/**
* 判断控件初始化时是否有焦点
*/
@Override
public boolean isFocused() {
return true;
}
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
if (focused) {
// 有焦点时走父类方法,焦点被抢走时,不去做操作
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
}
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
if (hasWindowFocus) {
// 窗体有焦点时走父类的方法,窗体焦点消失,不去做操作
super.onWindowFocusChanged(hasWindowFocus);
}
}
5.在XML的布局文件当中,定义全路径名称【包名称+类名称】
二.继承布局ViewGroup的自定义控件 俗称【组合式自定义控件】
继承常见的ViewGroup类实现自定义控件:
ViewGroup就是指的一般的布局
【线性布局 LinearLayout】
【相对布局 RelativeLayout】
【帧布局 FrameLayout】
使用组合自定义控件的好处:
对于布局类型相同的代码,如果想要动态的去修改内容.可以采用组合式自定义控件.
这样操作,能够极大的缩减布局XML冗余的代码编写。
组合式自定义控件的编写步骤说明:
1.抽取一个布局文件,作为打气筒布局.【当前的这个布局是公共部分布局】
2.写一个类.继承ViewGroup或者ViewGroup的子类
3.重写三个构造方法
4.在构造方法当中,采用打气筒去填充此时此刻的视图
5.可以在构造方法.这里去关心控件,关心来自于打气筒布局里面的控件对象
6.接下来.就可以对于关心的控件设置各自的属性了
7.对于需要使用自定义控件的布局.设置全路径名称【包名称+类名称】
0 0
- [Android自定义控件] Android自定义控件
- Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- Android 自定义控件 单页翻书控件
- android虚线控件---自定义控件
- android自定义控件实例 --控件
- Android自定义控件--组合控件
- android 控件 自定义组合控件
- 【android自定义控件】ProgressBar自定义
- Android自定义控件 自定义属性
- Android自定义控件 -- 自定义View
- Android自定义控件 -- 自定义ViewGroup
- Android 自定义控件 自定义标题栏
- Android 自定义控件-自定义进度条。
- spfa 汇率转换
- JeeWx捷微3.0多触点版本发布,支持微信公众号,微信企业号,支付窗——喜迎双“旦”
- strlen().printf()和scanf()函数
- EventBus使用以及源码分析
- python爬虫初试
- Android自定义控件
- Java中StringBuilder清空数据方法比较
- 6.玩转Spring Boot 自定义Banner
- Linux:vim主要命令总结
- JAVA中泛型的理解
- Mysql通信协议
- Android系列之网络(二)----HTTP请求头与响应头
- 寻找倍数
- HIVE表数据导出至本地文件系统