【Android】重写原生控件及使用
16lz
2021-01-25
【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();
更多相关文章
- Android(安卓)硬件加速
- Android(安卓)检测SD卡是否可用
- Android压缩文件成.zip及解压缩.zip文件方法
- Android中的四大组件回顾
- Android解析自定义xml文件--Dom解析xml文件,测试demo(方案四)
- Android(安卓)Tips1
- android拖拽功能的实现原理
- Android之Canvas
- android 获取应用程序(包)的信息和缓存大小 PackageManager的使