DatePicker隐藏“天”选择

来源:互联网 发布:足球球员数据统计表格 编辑:程序博客网 时间:2024/05/22 03:13

最近使用了DatePicker 这个控件,采用的是往上又一次分装的这种,就是两个卡片切换选择年月日和时间。

有一个需求时这个选择器不显示出来“天”的这个选项。查资料发现,有人做了实现,具体代码还没弄清楚,可以研究DatePicker源码,这里主要是根据反射原理获取到DatePicker中的一些域,同时代码获取到布局,然后在进行操作,如:修改分割线颜色,隐藏某一个域等。这里做一个记录,方便后续使用。

创建对象是调用方法:

 /**     * 隐藏“天”     * @param mDatePicker     */    private void hideDay(DatePicker mDatePicker) {        try {            /* 处理android5.0以上的特殊情况 */            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {                int daySpinnerId = Resources.getSystem().getIdentifier("day", "id", "android");                if (daySpinnerId != 0) {                    View daySpinner = mDatePicker.findViewById(daySpinnerId);                    if (daySpinner != null) {                        daySpinner.setVisibility(View.GONE);                    }                }            } else {                Field[] datePickerfFields = mDatePicker.getClass().getDeclaredFields();                for (Field datePickerField : datePickerfFields) {                    if ("mDaySpinner".equals(datePickerField.getName()) || ("mDayPicker").equals(datePickerField.getName())) {                        datePickerField.setAccessible(true);                        Object dayPicker = new Object();                        try {                            dayPicker = datePickerField.get(mDatePicker);                        } catch (IllegalAccessException e) {                            e.printStackTrace();                        } catch (IllegalArgumentException e) {                            e.printStackTrace();                        }                        ((View) dayPicker).setVisibility(View.GONE);                    }                }            }        } catch (Exception e) {            e.printStackTrace();        }    }

这个方法就可以完成需求的操作。由此方法也能衍生出“月”,“年”等不同项的操作,这几个操作没有详细了解,待后续研究。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {        int daySpinnerId = Resources.getSystem().getIdentifier("day", "id", "android");        if (daySpinnerId != 0) {            View daySpinner = dp_mes.findViewById(daySpinnerId);            if (daySpinner != null) {                daySpinner.setVisibility(View.GONE);            }        }        int monthSpinnerId = Resources.getSystem().getIdentifier("month", "id", "android");        if (monthSpinnerId != 0) {            View monthSpinner = dp_mes.findViewById(monthSpinnerId);            if (monthSpinner != null) {                monthSpinner.setVisibility(View.VISIBLE);            }        }        int yearSpinnerId = Resources.getSystem().getIdentifier("year", "id", "android");        if (yearSpinnerId != 0) {            View yearSpinner = dp_mes.findViewById(yearSpinnerId);            if (yearSpinner != null) {                yearSpinner.setVisibility(View.GONE);            }        }    } else { //Older SDK versions        Field f[] = dp_mes.getClass().getDeclaredFields();        for (Field field : f) {            if (field.getName().equals("mDayPicker") || field.getName().equals("mDaySpinner")) {                field.setAccessible(true);                Object dayPicker = null;                try {                    dayPicker = field.get(dp_mes);                } catch (IllegalAccessException e) {                    e.printStackTrace();                }                ((View) dayPicker).setVisibility(View.GONE);            }            if (field.getName().equals("mMonthPicker") || field.getName().equals("mMonthSpinner")) {                field.setAccessible(true);                Object monthPicker = null;                try {                    monthPicker = field.get(dp_mes);                } catch (IllegalAccessException e) {                    e.printStackTrace();                }                ((View) monthPicker).setVisibility(View.VISIBLE);            }            if (field.getName().equals("mYearPicker") || field.getName().equals("mYearSpinner")) {                field.setAccessible(true);                Object yearPicker = null;                try {                    yearPicker = field.get(dp_mes);                } catch (IllegalAccessException e) {                    e.printStackTrace();                }                ((View) yearPicker).setVisibility(View.GONE);            }        }    }}


选择器连接:https://github.com/jjobes/SlideDateTimePicker

0 0
原创粉丝点击