【问题标题】:How Set Max & Min Date In WHEEL DatePicker In Android如何在 Android 中的 WHEEL DatePicker 中设置最大和最小日期
【发布时间】:2014-04-11 06:06:27
【问题描述】:

在我的应用程序中,我正在尝试 DatePicker 设置日期。我想根据系统日期设置日期选择器最大日期为今天日期。我不知道如何将日期选择器最大日期设置为今天日期。我可以知道实现目标的正确方法是什么?也许这个问题太基础了,但我没有找到任何合适的解决方案。请帮帮我

这是我的代码:

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

【问题讨论】:

    标签: android datepicker


    【解决方案1】:

    API 11 以上 对于最小日期,您可以使用

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

    对于最大日期

    android:maxDate="mm/dd/yyyy" // In XML
    setMaxDate(new Date().getTime());// Current time
    
    【解决方案2】:

    如果您使用高于 11 的 API 级别,则使用 setMaxDate 或 DatePicker 设置墨西哥日期。否则创建一个自定义 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;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      相关资源
      最近更新 更多