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.对于需要使用自定义控件的布局.设置全路径名称【包名称+类名称】
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

0 0