现在的位置: 首页 > 综合 > 正文

Andriod之DatePickerDialog,禁用年份或者日期的某些按钮

2014年02月07日 ⁄ 综合 ⁄ 共 3102字 ⁄ 字号 评论关闭

1.效果图

2.主界面,调用 MyDatePicker

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
/*1.响应开始日期设置按钮事件MainActivity.this*/
if(v == mBSDate){
    new MyDatePicker(MainActivity.this,
    new DatePickerDialog.OnDateSetListener() {

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
monthOfYear++;
String str=mETStart.getText().toString();
String fixedstr=str.substring(10);
String mMonthstr,mDaystr;
mMonthstr=""+monthOfYear;
mDaystr=""+dayOfMonth;
if(monthOfYear<10)
{
mMonthstr="0"+mMonthstr;
}
if(dayOfMonth<10)
{
mDaystr="0"+mDaystr;
}

str=year+"-"+mMonthstr+"-"+mDaystr+fixedstr;
mETStart.setText(str);

}},mCalendar.get(Calendar.YEAR),mCalendar.get(Calendar.MONTH),mCalendar.get(Calendar.DAY_OF_MONTH)
).show();

    }

}

3.定义 MyDatePicker

package com.example.parkbook;

import java.lang.reflect.Field;
import java.util.Calendar;
import java.util.Date;

import android.app.DatePickerDialog;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.DatePicker;
import android.widget.LinearLayout;

/**
* 日期选择对话框

* @author hp
*
*/
public class MyDatePicker extends DatePickerDialog {
        public MyDatePicker(Context context, OnDateSetListener callBack, int year,
                        int monthOfYear, int dayOfMonth) {
                super(context, callBack, year, monthOfYear, dayOfMonth);
            
        }
        
        public MyDatePicker(Context context, OnDateSetListener callBack, int year,
                        int monthOfYear, int dayOfMonth,int type){
                super(context, callBack, year, monthOfYear, dayOfMonth);
               
        }
        /**
         * 
         */
        @Override
        public void onDateChanged(DatePicker view, int year, int month, int day) {
        //((ViewGroup) ((ViewGroup) view.getChildAt(0)).getChildAt(0)).getChildAt(2).setEnabled(false);
                        super.onDateChanged(view, year, month, day);
              
        }

        /**
         * 更新日期对话框

         */
        @Override
        public void updateDate(int year, int monthOfYear, int dayOfMonth) {
                super.updateDate(year, monthOfYear, dayOfMonth);
        }
        @Override  
        public void show() {  
            // TODO Auto-generated method stub  
            super.show();  
             DatePicker dp = findDatePicker((ViewGroup) this.getWindow().getDecorView());  
               if (dp != null) {  
                        ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setEnabled(false); /*j禁用年的+-按钮*/

                  //  ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(1)).getChildAt(2).setEnabled(false); /*j禁用月的+-按钮*/
                    //((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(2)).getChildAt(2).setEnabled(false);/*j禁用日的+-按钮*/

                }   
        }  
        /** 
         * 从当前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;  
      

        }   

}

///////////////////////////////////////////////

抱歉!评论已关闭.