1. 程式人生 > >DatePicker只顯示月日,不顯示年

DatePicker只顯示月日,不顯示年

datepicker控制元件中內建了三個NumberPicker控制元件,找到顯示日的控制元件,然後將其隱藏掉。

在2.2系統中DatePicker控制元件保含了一個LinearLayout子view,而LinearLayout中包含三個NumberPicker控制元件分別用來顯示年月日,NumberPicker控制元件中又包含了三個子view,分別是NumberPickerButton("+"號)\EditText\NumberPickerButton("-"號);

1.顯示月日,不顯示年:

 if(datePicker != null){
                     ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
                }

2.顯示年月,不顯示日:

 if(datePicker != null){
                    ((ViewGroup) datePicker.getChildAt(0)).getChildAt(2).setVisibility(View.GONE);
                }

3.顯示年日,不顯示月:

if(datePicker != null){
                    ((ViewGroup) datePicker.getChildAt(0)).getChildAt(1).setVisibility(View.GONE);
                }

在4.0系統中DatePicker中view層次結構與2.2不同,多了一層:DatePicker包含了一個子view:LinearLayout.LinearLayout中包含了兩個子view:LinearLayout和CalendarView.子LiearLayout中包含了三個NumberPicker控制元件NumberPicker控制元件中包含了三個子控制元件:NumberPickerButton("+"號)\EditText\NumberPickerButton("-"號)。
這就造成上面的那段程式碼在4.0中是達不到目的,想要在4.0中也實現該功能需修改程式碼如下:

1.顯示月日,不顯示年:

if(datePicker != null){
                    ((ViewGroup)((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
                }

2.顯示年月,不顯示日:

if(datePicker != null){
                    ((ViewGroup)((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE);
                }

3.顯示年日,不顯示月:

 if(datePicker != null){
                    ((ViewGroup)((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(1).setVisibility(View.GONE);
                }
岸上所述即可在原生的DatePicker上完成自己的需要。