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

【1】关于重写的Class(这里通过Numberpciker作为事例)

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】调用处的方法

    - XML文件的引用(注意姿势)

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

 - Class文件使用

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

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

- 小插曲,因为需要用到static方法,所以凡是涉及到的方法or成员都需要变成static的

这显然不能接受

最终比较好的实现方案

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

    
    protected static SettingMessageNotificationTimeActivity sMe;

    public static SettingMessageNotificationTimeActivity getInstance() {
        return sMe;
    }

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

            SettingMessageNotificationTimeActivity.getInstance().FunctionTest();

猜你喜欢

转载自my.oschina.net/u/2273965/blog/673829