天天看點

[Android]隻顯示月和日的DatePickerDialog

前言

 需求要隻顯示月和日的月曆控件,又不想自定義控件,最簡單的辦法就是隐藏顯示年的這個框了,但datepickerdialog并沒有直接提供方法來操作,這裡分享一個笨辦法:)

聲明

  歡迎轉載,但請保留文章原始出處:) 

    部落格園:http://www.cnblogs.com

    農民伯伯: http://over140.cnblogs.com   

正文

  一、效果圖

    1.1 預設

[Android]隻顯示月和日的DatePickerDialog

    1.2 處理後 

[Android]隻顯示月和日的DatePickerDialog

  二、實作代碼

    2.1  代碼片段1

[Android]隻顯示月和日的DatePickerDialog

    /**

     * 從目前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;

    } 

[Android]隻顯示月和日的DatePickerDialog

      代碼說明:

通過斷點也看到dialog的contentview裡有datepicker子控件,這裡通過周遊的辦法來查找這個控件。

    2.2  使用代碼 

[Android]隻顯示月和日的DatePickerDialog

        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);

        } 

[Android]隻顯示月和日的DatePickerDialog

        通過源碼可以看得到datepicker内置三個numberpicker控件,依次表示年、月、日,隐藏掉第一個即可。

    三、補充

      後續使用中發現标題欄也要改,通過檢視datepickerdialog源碼,需要自定義并實作ondatechanged方法才可實作,如下代碼:

[Android]隻顯示月和日的DatePickerDialog

    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 + "日");

    }

[Android]隻顯示月和日的DatePickerDialog

轉載:http://www.cnblogs.com/over140/archive/2011/09/20/2181532.html

繼續閱讀