2017-07-17 41 views
0
private void findViewsById() { 
    fromDateEtxt = (EditText) findViewById(R.id.dobET); 
    fromDateEtxt.setInputType(InputType.TYPE_NULL); 
    fromDateEtxt.requestFocus(); 
} 

private void setDateTimeField() { 
    fromDateEtxt.setOnClickListener(this); 
    Calendar newCalendar = Calendar.getInstance(); 
    fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { 

     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
      Calendar dob = Calendar.getInstance(); 
      dob.set(year, monthOfYear, dayOfMonth); 
      fromDateEtxt.setText(dateFormatter.format(dob.getTime())); 

      Calendar today = Calendar.getInstance(); 
      dob.set(year, monthOfYear, dayOfMonth); 
      int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR); 
      Integer ageInt = new Integer(age); 
      String ageS = ageInt.toString(); 
      if(age >= 18) { 
       fromDateEtxt.setText(dateFormatter.format(dob.getTime())); 
       fromDateEtxt.setError(null); 
      } 
      else { 
       fromDateEtxt.setText(""); 
       fromDateEtxt.setError("Age must be above 18 years."); 
      } 
     } 

    }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); 

} 

在这个例子中,我们希望日历只显示18岁以上的出生日期。我使用fromDateEtxt.setError(“年龄必须在18岁以上”),因为如果用户少于18岁。我怎样才能实现年龄必须高于18的日历

+0

看看这个链接https://stackoverflow.com/a/44545781/8164071 –

回答

0
/** 
* Method to extract the user's age from the entered Date of Birth. 
* 
* @param DoB String The user's date of birth. 
* 
* @return ageS String The user's age in years based on the supplied DoB. 
*/ 

    private String getAge(int year, int month, int day){ 
     Calendar dob = Calendar.getInstance(); 
     Calendar today = Calendar.getInstance(); 

     dob.set(year, month, day); 

     int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR); 

     if (today.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)){ 
      age--; 
     } 

     Integer ageInt = new Integer(age); 
     String ageS = ageInt.toString(); 

     return ageS; 
    } 
0

可以使用setMaxDate()

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.YEAR, -18); 
DatePickerDialog dpd = new DatePickerDialog(this, null, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); 
dpd.getDatePicker().setMaxDate(cal.getTime().getTime()); 
dpd.show(); 
+0

先生我用这个代码,但当我点击编辑文本它显示到2017年,但当我关闭它,并再次打开它工作正常 –

+0

你可以发布你已经实施? –

+0

我正在尝试发布我已实施的内容,但帖子太长。但我正在发送其中的一部分。 –

0
private void setDateTimeField() { 
    fromDateEtxt.setOnClickListener(this); 
    dob = Calendar.getInstance(); 
    fromDatePickerDialog = new DatePickerDialog(this, new 
DatePickerDialog.OnDateSetListener() { 
     public void onDateSet(DatePicker view, int year, int monthOfYear, 
int dayOfMonth) { 

      dob.add(Calendar.YEAR, -18); 

fromDatePickerDialog.getDatePicker().setMaxDate(dob.getTime().getTime()); 
      dob.set(year, monthOfYear, dayOfMonth); 
      fromDateEtxt.setText(dateFormatter.format(dob.getTime())); 
      dob.set(year, monthOfYear, dayOfMonth); 
       fromDateEtxt.setText(dateFormatter.format(dob.getTime())); 
     } 
    }, dob.get(Calendar.YEAR), dob.get(Calendar.MONTH), 

dob.get(Calendar.DAY_OF_MONTH))限制用户; }