2014-09-25 10 views
0

我正在開發一個項目,該窗體中有一個生日日期字段。所以我嘗試使用datepicker控件。但是很難設置控件中的最大和最小日期。蜂窩前的版本與蜂窩後的版本不同。以下是我使用的代碼。如何在沒有日期選擇控件的android窗體中設置出生日期

主類:

package com.example.datepickercustom; 

import java.util.Calendar; 
import java.util.GregorianCalendar; 

import android.os.Build; 
import android.os.Bundle; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
Button btndate; 
TextView txtdate; 
private int intCurrentYear; 
private int intCurrentMonth; 
private int intCurrentDay; 
private int intMaxYear; 
private int intMaxMonth; 
private int intMaxDay; 
private int intMinYear; 
private int intMinDay; 
private int intMinMonth; 
private int year; 
private int month; 
private int day; 
private static final int MILLIS_IN_SECOND = 1000; 
private static final int SECONDS_IN_MINUTE = 60; 
private static final int MINUTES_IN_HOUR = 60; 
private static final int HOURS_IN_DAY = 24; 
private static final int DAYS_IN_YEAR = 365; 
static final int DATE_PICKER_ID = 1111; 
GregorianCalendar calendar; 
DatePicker mDatePickerInstance; 
    DatePickerDialogWithMaxMinRange datePickerDialog= null; 
DatePickerDialog.OnDateSetListener datePickerOnDateSetListener; 
Calendar myCalendar; 
DatePickerDialog dpd; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btndate=(Button) findViewById(R.id.btndate); 
     txtdate=(TextView) findViewById(R.id.txtdate); 
     final Calendar c = Calendar.getInstance(); 
     year = c.get(Calendar.YEAR); 
     month = c.get(Calendar.MONTH); 
     day = c.get(Calendar.DAY_OF_MONTH); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 




     // Show current date 

     txtdate.setText(new StringBuilder() 
       // Month is 0 based, just add 1 
       .append(month + 1).append("-").append(day).append("-") 
       .append(year).append(" ")); 
     } 
     else 
     { 

      setDate(); 
     } 
     btndate.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
        showDialog(DATE_PICKER_ID); 
       } 
       else 
       { 
       datePickerDialog.show(); 
       } 
      } 
     }); 
    } 
    @SuppressLint("NewApi") 
    @Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case DATE_PICKER_ID: 
      final long MILLISECONDS_IN_YEAR = 
       (long)MILLIS_IN_SECOND * SECONDS_IN_MINUTE * MINUTES_IN_HOUR 
       * HOURS_IN_DAY * DAYS_IN_YEAR; 
      Calendar now = Calendar.getInstance(); 
      calendar=new GregorianCalendar(); 
      int current_year=now.get(Calendar.YEAR); 
      // open datepicker dialog. 
      // set date picker for current date 
      // add pickerListener listner to date picker 
      dpd=new DatePickerDialog(this, pickerListener, year, month,day); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
       //Calendar.getInstance().get(Calendar.YEAR)-19 
      dpd.getDatePicker().setMaxDate((current_year-16-1970)*MILLISECONDS_IN_YEAR); 
      dpd.getDatePicker().setMinDate((current_year-100-1970)*MILLISECONDS_IN_YEAR); 
      } 
      return dpd; 
     } 
     return null; 
     } 

    public void setDate() { 
     /* 
     * Initialise Listener for date set 
     */ 
     txtdate.setText(new StringBuilder().append(year) 
       .append("-").append(month + 1).append("-") 
       .append(day)); 

     datePickerOnDateSetListener = new DatePickerDialog.OnDateSetListener() { 
      public void onDateSet(DatePicker view, int year, int monthOfYear, 
        int dayOfMonth) { 
       txtdate.setText(new StringBuilder().append(year) 
         .append("-").append(monthOfYear + 1).append("-") 
         .append(dayOfMonth)); 
      } 


     }; 

     // initialise DatePicker 

     myCalendar = Calendar.getInstance(); 

     intCurrentYear = myCalendar.get(Calendar.YEAR); 
     intCurrentMonth = myCalendar.get(Calendar.MONTH); 
     intCurrentDay = myCalendar.get(Calendar.DAY_OF_MONTH); 

     intMaxYear = intCurrentYear-18; 
     intMaxMonth = intCurrentMonth; 
     intMaxDay = intCurrentDay; 

     intMinYear = intCurrentYear-100; 
     intMinMonth = intCurrentMonth; 
     intMinDay = intCurrentDay; 

     datePickerDialog = new DatePickerDialogWithMaxMinRange(
       this, datePickerOnDateSetListener,intMinYear,intMinMonth,intMinDay,intMaxYear,intMaxMonth,intMaxDay); 
    } 

    private DatePickerDialog.OnDateSetListener pickerListener = new DatePickerDialog.OnDateSetListener() { 

     // when dialog box is closed, below method will be called. 
     @Override 
     public void onDateSet(DatePicker view, int selectedYear, 
       int selectedMonth, int selectedDay) { 

      year = selectedYear; 
      month = selectedMonth; 
      day = selectedDay; 

      // Show selected date 
      txtdate.setText(new StringBuilder().append(month + 1) 
        .append("-").append(day).append("-").append(year) 
        .append(" ")); 

      } 
     }; 

} 

的版本中的自定義類之前的蜂窩到:

package com.example.datepickercustom; 

import android.app.DatePickerDialog; 
import android.content.Context; 
import android.widget.DatePicker; 

public class DatePickerDialogWithMaxMinRange extends DatePickerDialog { 

    static int maxYear=2005; 
    static int maxMonth=11; 
    static int maxDay=31; 

    int minYear=1955; 
    int minMonth=0; 
    int minDay=1; 


    public DatePickerDialogWithMaxMinRange(Context context, OnDateSetListener callBack,int minYear,int minMonth,int minDay,int maxYear,int maxMonth,int maxDay) { 
     super(context,callBack, maxYear, maxMonth, maxDay); 
     this.minDay = minDay; 
     this.minMonth = minMonth; 
     this.minYear = minYear; 
     DatePickerDialogWithMaxMinRange.maxDay = maxDay; 
     DatePickerDialogWithMaxMinRange.maxMonth = maxMonth; 
     DatePickerDialogWithMaxMinRange.maxYear = maxYear; 
    } 

    @Override 
    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     super.onDateChanged(view, year, monthOfYear, dayOfMonth); 

      if (year > maxYear ||monthOfYear > maxMonth && year == maxYear|| 
        dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth){ 
       view.updateDate(maxYear, maxMonth, maxDay); 
       }else if(year < minYear ||monthOfYear < minMonth && year == minYear|| 
        dayOfMonth < minDay && year == minYear && monthOfYear == minMonth){ 
       view.updateDate(minYear, minMonth, minDay); 
       } 
    } 
} 

我的問題是,上述出現長期艱苦設置birth.Is的日期有沒有更好的做上述?

回答

0

DatePickersetMinDatesetMaxDate方法。使用它們設置最小和最大日期非常簡單。

你是什麼意思下此之後 蜂窩

原因有區別之前?:

版本從版本蜂巢工作方式不同。 DatePicker與當前的Android版本相匹配,並且應該與不同以及用於任何控制。

0

你可以使用第三方庫來呈現日曆視圖,然後點擊你可以選擇所需的日期。我已經使用時間平方庫用於相同的目的,非常nice.take看看HERE。 還有一個很好的圖書館檢查THIS
在對話框中使用它們,並取消對話框,當你完成選擇日期。如上所述,你還可以顯示任何你想要的日期範圍內的視圖。所以你可以設置一個最大值和最小值日期。只有閱讀正確的使用方法和它的簡單有效

相關問題