簡體   English   中英

如何從當前月份和年份的日期選擇器顯示以限制顯示上一年和月份的android?

[英]How to display from current month and year in date picker to restrict showing previous year and month android?

我在使用像這樣的地方使用自定義日期選擇器。

public class DatePickersDialog extends DatePickerDialog implements OnDateChangedListener {

    private DatePickerDialog mDatePicker;

     public DatePickersDialog(Context context, OnDateSetListener callBack,
            int year, int monthOfYear, int dayOfMonth) {
        super(context,callBack, year, monthOfYear, dayOfMonth);
       mDatePicker = new DatePickerDialog(context,callBack, year, monthOfYear, dayOfMonth);
       mDatePicker.getDatePicker().init(year, monthOfYear, dayOfMonth, this);
        updateTitle(year, monthOfYear);

    }
    public void onDateChanged(DatePicker view, int year,
        int month, int day) {
    updateTitle(year, month);
    }
    private void updateTitle(int year, int month) {
        Calendar mCalendar = Calendar.getInstance();
        mCalendar.set(Calendar.YEAR, year);
        mCalendar.set(Calendar.MONTH, month);
        mDatePicker.setTitle(getFormat().format(mCalendar.getTime()));

    }  
    public DatePickerDialog getPicker(){
        return this.mDatePicker;
    }

    public SimpleDateFormat getFormat(){
    return new SimpleDateFormat("MMM, yyyy");
    };   

   }
Utils.class 


public static DatePickerDialog customDatePickers(Activity activity, DatePickerDialog.OnDateSetListener datePickerListener) {

    Calendar c = Calendar.getInstance();
    int cardYear = c.get(Calendar.YEAR);
    int cardMonth = c.get(Calendar.MONTH);
    int cardDay = c.get(Calendar.DAY_OF_MONTH);
    DatePickersDialog datePickersDialog = new DatePickersDialog(activity,datePickerListener,cardYear,cardMonth,cardDay);
    Date minDate = new Date();
    c.set(cardYear, cardMonth, cardDay - 1, 0, 0);
    minDate.setTime(c.getTimeInMillis());
    DatePickerDialog datePickerDialog = datePickersDialog.getPicker();

    try {
        Field[] datePickerDialogFields = datePickerDialog.getClass().getDeclaredFields();
        for (Field datePickerDialogField : datePickerDialogFields) {
            if (datePickerDialogField.getName().equals("mDatePicker")) {
                datePickerDialogField.setAccessible(true);
                DatePicker datePicker = (DatePicker) datePickerDialogField.get(datePickerDialog);
                Field datePickerFields[] = datePickerDialogField.getType()
                        .getDeclaredFields();
                for (Field datePickerField : datePickerFields) {
                    if ("mDayPicker".equals(datePickerField.getName()) || "mDaySpinner".equals(datePickerField.getName())) {
                        datePickerField.setAccessible(true);
                        Object dayPicker = new Object();
                        dayPicker = datePickerField.get(datePicker);
                        ((View) dayPicker).setVisibility(View.GONE);
                    }
                }
            }
        }
        datePickerDialog.show();
    } catch (Exception ex) {
    }
    return datePickerDialog;
}

 scanExpireDate = (CheckoutEditText) findViewById(R.id.scan_expire_date);
scanExpireDate.setTextView();



public void onDatePickerClick(View view){
            Utils.customDatePicker(this, datePickerListener);
    }

但它顯示如下圖所示。 顯示上一年和一個月。 如何限制呢? 在此處輸入圖片說明

如何愛這個呢?

提前致謝

使用以下方法設置邊界:

setMinDate(long minDate)
setMaxDate(long maxDate)

其中,自變量是默認時區中自1970年1月1日00:00:00以來的通常毫秒數。 當然,您仍然必須計算這些值,但這對於Calendar類來說應該是微不足道的:只需獲取當前日期並減去x年即可。

編輯:您可以從DatePickerDialog(通過簡單地調用getDatePicker())獲取基礎的DatePicker或在您的代碼中,我認為這是您調用DatePicker datePicker並在其中添加以下行的地方:

datePicker.setMinDate(<long variable>);

我通過在自定義日期選擇器中使用它來解決此問題。 希望對別人有幫助

DatePickerDialog datePickerDialog = datePickersDialog.getPicker(); 。datePickerDialog.getDatePicker()setMinDate(minDate.getTime());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM