【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();
相關文章
相關標籤/搜索