Android 1.5 中 onDateChanged() 中具有最大和最小日期的日期选择器?

Posted

技术标签:

【中文标题】Android 1.5 中 onDateChanged() 中具有最大和最小日期的日期选择器?【英文标题】:Date Picker with max and minimum date in onDateChanged() in Android 1.5? 【发布时间】:2012-01-30 08:25:26 【问题描述】:

我正在使用 android 1.5 中的 DatePicker。我正在尝试设置最大和最小日期。最小日期应该是当前日期,最大日期应该是我将从字符串提供的日期为 maxYear、maxMonth、maxDay。(假设今天的日期 = 30/12/2011,但它选择 29/12/2011)

在最短日期下一切正常。因为它只显示当前日期。但是在选择器上使用减号按钮进行选择时,它选择的日期小于今天的日期。 而在选择最大日期的情况下,它选择的日期、月份和年份比最大日期多。

如何限制用户不要选择小于最小日期和最大日期。我必须添加什么额外条件才能使其完美?

enter code here

///Whole code same


mport java.sql.Date;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.DatePicker.OnDateChangedListener;

 public class DatePickerActivity extends Activity implements Button.OnClickListener 
 public String dateOutput=null;

final Calendar c = Calendar.getInstance();
int minYear1 = c.get(Calendar.YEAR); 
int minMonth1 = c.get(Calendar.MONTH);
int minDay1 = c.get(Calendar.DAY_OF_MONTH);

int maxYear = 2011;// 
int maxMonth = 12;
int maxDay = 29;

int minYear = minYear1;
int minMonth = minMonth1;
int minDay = minDay1;
public void onCreate(Bundle savedInstanceState) 
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DatePicker DateDP = (DatePicker) findViewById (R.id.ad_date_picker);
DateDP.init(minYear1, minMonth1, minDay1, new OnDateChangedListener()
  

    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
        
             if (year < minYear)
             view.updateDate(minYear, minMonth, minDay);

             if (monthOfYear < minMonth && year == minYear  )
             view.updateDate(minYear, minMonth, minDay );



             if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
             view.updateDate(minYear, minMonth, minDay);


             if (year > maxYear)
             view.updateDate(maxYear, maxMonth, maxDay);

             if (monthOfYear > maxMonth && year == maxYear)
             view.updateDate(maxYear, maxMonth, maxDay);

             if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
             view.updateDate(maxYear, maxMonth, maxDay);

            dateOutput = String.format("Date Selected: %02d/%02d/%04d", 
                                        dayOfMonth, monthOfYear+1, year);
            // Log.d("Debug", dateOutput);



            Toast.makeText(DatePickerActivity.this,dateOutput,   Toast.LENGTH_SHORT).show();


        ); // DateDP.init()



    



 

【问题讨论】:

我认为这篇文章对其他人会有所帮助,它的 Android 1.5 没有像 setMaxdate() 这样的东西。 【参考方案1】:

这样,我解决了我的问题

DateDP.init(minYear, minMonth, minDay, new OnDateChangedListener()
    

    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
     
            if (year > maxYear ||monthOfYear > maxMonth && year == maxYear||
                 dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
            // Toast.makeText(DatePickerActivity.this,"max year", Toast.LENGTH_SHORT).show();

            view.updateDate(maxYear, maxMonth, maxDay);

            dateOutput = String.format("%04d-%02d-%02d", 
                 maxYear, maxMonth+1, maxDay);
           //Toast.makeText(DatePickerActivity.this,"maxYear  "+dateOutput, Toast.LENGTH_SHORT).show();

            else if(year < minYear ||monthOfYear < minMonth && year == minYear||
                 dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)


            //Toast.makeText(DatePickerActivity.this,"min year", Toast.LENGTH_SHORT).show();

             view.updateDate(minYear, minMonth, minDay );

            dateOutput = String.format("%04d-%02d-%02d", 
                    minYear, minMonth+1, minDay);

                 //Toast.makeText(ManageShowing.this,dateOutput, Toast.LENGTH_SHORT).show();                              

            else

             //Toast.makeText(ManageShowing.this,"else", Toast.LENGTH_SHORT).show();

             dateOutput = String.format("%04d-%02d-%02d", 
                     year, monthOfYear+1, dayOfMonth);

                    // Toast.makeText(ManageShowing.this,dateOutput, Toast.LENGTH_SHORT).show();                     

            
            mDateDisplay.setText(dateOutput);

    ); // DateDP.init()

【讨论】:

以上是关于Android 1.5 中 onDateChanged() 中具有最大和最小日期的日期选择器?的主要内容,如果未能解决你的问题,请参考以下文章

onDateChange react-dates上的未定义值

将 Android 版本 2.3 转换为 1.5

在 Android 1.5 服务中使用唤醒锁

Android 1.5:阅读短信

Android 1.5 SDK + 相对布局 + EditText 在横向视图中拉伸

Fabric 插件未安装在 linux 系统上的 android studio 1.5 中