【问题标题】:Setting maximum and minimum dates for datepicker for API level less than 11为 API 级别小于 11 的日期选择器设置最大和最小日期
【发布时间】:2014-09-15 14:58:53
【问题描述】:

我正在尝试创建一个包含最大和最小日期的日期选择器对话框。我已完成以下操作:

package com.androidexample.datepicker;

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

public class DatePickerExample extends Activity {

    private TextView Output;
    private Button changeDate;

    private int year;
    private int month;
    private int day;
    DatePickerDialog dpd;
    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; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Output = (TextView) findViewById(R.id.Output);
        changeDate = (Button) findViewById(R.id.changeDate);

        // Get current date by calender

        final Calendar c = Calendar.getInstance();
        year  = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day   = c.get(Calendar.DAY_OF_MONTH);

        // Show current date

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

        // Button listener to show date picker dialog

        changeDate.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                // On button click show datepicker dialog 
                showDialog(DATE_PICKER_ID);

            }

        });
   }


    @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();
             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 new DatePickerDialog(this, pickerListener, year, month,day);
        }
        return null;
    }

    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 
            Output.setText(new StringBuilder().append(month + 1)
                    .append("-").append(day).append("-").append(year)
                    .append(" "));

           }
        };

}

清单文件中的最小 sdk 设置为 8。但是 setmaxdate 和 setmindate 显示错误。所以我将最小 sdk 级别更改为 11。但我希望代码也适用于低于 11 的 API 级别。如何API 级别小于 11 的年限和最小年限如何设置?

【问题讨论】:

    标签: java android datepicker


    【解决方案1】:

    在您的 DatePickerDialog 中试试这个:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date minDate=new Date("Jan-01-01");
         minDate.setYear(Calendar.getInstance().get(Calendar.YEAR)-3914);
         Date maxDate=new Date("Jan-01-01");
         maxDate.setYear(Calendar.getInstance().get(Calendar.YEAR)+6085);
         dpd.getDatePicker().setMinDate(minDate.getTime());
         dpd.getDatePicker().setMaxDate(maxDate.getTime());
    

    【讨论】:

    • 但是 getDatePicker 方法不适用于低于 11 的 api 级别
    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多