【Android】重写原生控件及使用

【1】关于重写的Class(这里经过Numberpciker做为事例)android

public class RakurakuNumberPicker extends NumberPicker {//[1]继承想要重写的控件
    //[2]必须完成其自身的构造函数(三个都写上最好)
    public RakurakuNumberPicker(Context context) {
        super(context);
    }

    public RakurakuNumberPicker(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public RakurakuNumberPicker(Context context, AttributeSet attrs,
            int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    //[3]贴上你本身添加的方法or重写的方法
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {

        if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) {
            SettingMessageNotificationTimeActivity.getInstance()
                    .updateArrowGuidanceUI(true);
        }
        if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
            SettingMessageNotificationTimeActivity.getInstance()
                    .updateArrowGuidanceUI(false);
        }
        return super.dispatchKeyEvent(event);
    }

}

【2】调用处的方法ide

    - XML文件的引用(注意姿式)函数

<com.android.mms.ui.RakurakuNumberPicker
            android:id="@+id/notice_time_picker"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

 - Class文件使用ui

//声明
private RakurakuNumberPicker mNoticeTimePicker;
//绑定
mNoticeTimePicker = (RakurakuNumberPicker)findViewById(R.id.notice_time_picker);

【3】彩蛋(重写的View调用调用处的方法)spa

- 小插曲,由于须要用到static方法,因此凡是涉及到的方法or成员都须要变成static的code

这显然不能接受对象

最终比较好的实现方案继承

- Activity开放一个得到其对象的静态方法ci

protected static SettingMessageNotificationTimeActivity sMe;

    public static SettingMessageNotificationTimeActivity getInstance() {
        return sMe;
    }

- 自定义的空间拿到Activity对象而后调用其方法rpc

SettingMessageNotificationTimeActivity.getInstance().FunctionTest();
相关文章
相关标签/搜索