简体   繁体   English

如何在Android中的WHEEL DatePicker中设置最大和最小日期

[英]How Set Max & Min Date In WHEEL DatePicker In Android

In my application am trying DatePicker to set date.I want to set date picker Maximum date is as today date according to system date.i don't know how to set date picker maximum date as today date.May I know what is the correct way to achieve my objective?Maybe this question too basic, but i did't find any suitable solution.Please Help me out在我的应用程序中,我正在尝试使用DatePicker设置日期。我想根据系统日期将日期选择器的最大日期设置为今天的日期。我不知道如何将日期选择器的最大日期设置为今天的日期。我知道什么是正确的如何实现我的目标?也许这个问题太基本了,但我没有找到任何合适的解决方案。请帮帮我

Here is my code :这是我的代码:

    public class UserDob extends Activity {

    TextView tvDisplayDate;
     DatePicker datePickerBirthday;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_dob);

        ActionBar ab = getActionBar(); 
        ab.setDisplayUseLogoEnabled(false);
        ab.setDisplayShowHomeEnabled(true);
        ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
        ab.setCustomView(R.layout.actionbar);
        ab.setDisplayHomeAsUpEnabled(true);
        ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#FFFFFF"));     
        ab.setBackgroundDrawable(colorDrawable);

        datePickerBirthday=(DatePicker)findViewById(R.id.dpResult);
        tvDisplayDate = (TextView)findViewById(R.id.textViewUserDate);

         int currentapiVersion = android.os.Build.VERSION.SDK_INT;
            if (currentapiVersion >= 11) {
                datePickerBirthday.setCalendarViewShown(false);
            }

            SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
            String dateStr = sdfDateTime.format(new Date(System.currentTimeMillis()));

            String[] dateSplit = dateStr.split("-");
            int currentYear = Integer.parseInt(dateSplit[0]);
            int currentMonth = Integer.parseInt(dateSplit[1]);
            int currentDay = Integer.parseInt(dateSplit[2]);

            // to show date and day of week in the TextView
            setHumanReadableDate(currentYear, currentMonth, currentDay);

            // initialize date picker listener
            // currentMonth - 1, because on the picker, 0 is January
            datePickerBirthday.init(currentYear, currentMonth - 1, currentDay, birthdayListener);


    }
     // the date picker listener
   OnDateChangedListener birthdayListener = new OnDateChangedListener() {

       @Override
       public void onDateChanged(DatePicker birthDayDatePicker,
               int newYear, int newMonth, int newDay) {

           try{

               // currentMonth + 1, to retrieve proper month
               setHumanReadableDate(newYear, newMonth + 1, newDay);

           } catch (NullPointerException e) {
               e.printStackTrace();
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
   };

   // show the user a better date format
   public void setHumanReadableDate(int newYear, int newMonth, int newDay){
       try {

           String clickedDate = newYear + "-" + newMonth + "-" + newDay;
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
           Date d = null;
            try {
                d = sdf.parse(clickedDate);
            } catch (java.text.ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

           SimpleDateFormat sdfDateTime = new SimpleDateFormat("MMMM dd, yyyy 'is' EEEE", Locale.US);
           String dateStr = sdfDateTime.format(d);

           tvDisplayDate.setText(dateStr);

       } catch (ParseException e) {
           e.printStackTrace();
       }
   }
}

Above API 11 For min date you can use以上 API 11 对于最小日期,您可以使用

android:minDate="mm/dd/yyyy"
or setMinDate(long time)

For Max date对于最大日期

android:maxDate="mm/dd/yyyy" // In XML
setMaxDate(new Date().getTime());// Current time

if you are using API level above 11 then use setMaxDate of DatePicker to set mex date.如果您使用的 API 级别高于 11,则使用DatePicker setMaxDate来设置 mex 日期。 otherwise create a custom DatePicker and override onDateSet method, and apply your validation here like below否则创建一个自定义 DatePicker 并覆盖onDateSet方法,并在此处应用您的验证,如下所示

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
    Log.i(TAG, "onDateSet :which:");
    Calendar cl = Calendar.getInstance();
    cl.set(year, monthOfYear, dayOfMonth);
    if(cl.before(Calendar.getInstance())){
        this.mListener.onDateSet(view, year, monthOfYear, dayOfMonth);
    }else {
        Toast.makeText(mContext, "Please select any date before this.",    Toast.LENGTH_SHORT).show();
        return;
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM