首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

DatePickerDialog 批改,只显示月日,隐藏年

2012-07-01 
DatePickerDialog 修改,只显示月日,隐藏年需求要只显示月和日的日历控件,又不想自定义控件,最简单的办法就

DatePickerDialog 修改,只显示月日,隐藏年
需求要只显示月和日的日历控件,又不想自定义控件,最简单的办法就是隐藏显示年的这个框了,但DatePickerDialog并没有直接提供方法来操作,这里分享一个笨办法:)

效果图:

默认


处理后


代码片段1

/**     * 从当前Dialog中查找DatePicker子控件     *      * @param group     * @return     */    private DatePicker findDatePicker(ViewGroup group) {        if (group != null) {            for (int i = 0, j = group.getChildCount(); i < j; i++) {                View child = group.getChildAt(i);                if (child instanceof DatePicker) {                    return (DatePicker) child;                } else if (child instanceof ViewGroup) {                    DatePicker result = findDatePicker((ViewGroup) child);                    if (result != null)                        return result;                }            }        }        return null;    } 

代码说明:
        通过断点也看到Dialog的ContentView里有DatePicker子控件,这里通过遍历的办法来查找这个控件。


使用代码
final Calendar cal = Calendar.getInstance();        mDialog = new CustomerDatePickerDialog(getContext(), this,            cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),            cal.get(Calendar.DAY_OF_MONTH));        mDialog.show();                DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView());        if (dp != null) {            ((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);        } 

代码说明:

        通过源码可以看得到DatePicker内置三个NumberPicker控件,依次表示年、月、日,隐藏掉第一个即可。


补充
后续使用中发现标题栏也要改,通过查看DatePickerDialog源码,需要自定义并实现onDateChanged方法才可实现,如下代码:
class CustomerDatePickerDialog extends DatePickerDialog {        public CustomerDatePickerDialog(Context context,                OnDateSetListener callBack, int year, int monthOfYear,                int dayOfMonth) {            super(context, callBack, year, monthOfYear, dayOfMonth);        }        @Override        public void onDateChanged(DatePicker view, int year, int month, int day) {            super.onDateChanged(view, year, month, day);            mDialog.setTitle((month + 1) + "月" + day + "日");        }    }
1 楼 liuxian13183 2012-02-14   能不能把详细的代码或者demo发一下,jackie.new@163.com 谢谢!

热点排行