android DatePickerDialog怎么设置日期选择范围。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android DatePickerDialog怎么设置日期选择范围。相关的知识,希望对你有一定的参考价值。

有个订房的入住日期,还有退房日期。入住日期肯定在当前日期之后,退房日期肯定在入住日期之后。那么怎么做出这个功能呢?
我想要的是:不能选择的日期直接灰掉。不要总是出现提示信息,感觉很繁琐。。

时间设置对话框DatePickerDialog的使用
一、可以同过重载DatePickerDialog的setTitle来设置个性的标题
比如:
@Override
public void setTitle(CharSequence title)
// TODO Auto-generated method stub
java.text.DateFormat dataFormat = (DateFormat
.getDateFormat(getContext()));
mCalendar = Calendar.getInstance();
//可得到“12/31/1969(Wed)”形式的日期格式
String strTitle=dataFormat.format(mCalendar.getTime())
+ DateFormat.format(" (E)", mCalendar.getTime()).toString();
super.setTitle(dataFormat.format(strTitle);


二、通过onDateChanged回调函数监听时间的改变
当时间改变时(编辑) 以下函数回被调用
public void onDateChanged(DatePicker view, int year, int month, int day)
Log.i("hubin","onDateChanged");


三、通过updateDate()设置年月日
public void updateDate (int year, int monthOfYear, int dayOfMonth)设置DatePickerDialog的年,月,日

四、通过onDateChangedListener来监听时间设置对话框的确定按钮被按下
onDateChangedListener的onDateSet是用于都在时间设置对话框的确定按钮被按下的监听

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
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 TestClock extends Activity implements OnDateSetListener, OnClickListener
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.date);
btn.setOnClickListener(this);


public void onClick(View v) //普通按钮事件
Calendar d = Calendar.getInstance(Locale.CHINA);
//创建一个日历引用d,通过静态方法getInstance() 从指定时区 Locale.CHINA 获得一个日期实例
Date myDate=new Date();
//创建一个Date实例
d.setTime(myDate);
//设置日历的时间,把一个新建Date实例myDate传入
int year=d.get(Calendar.YEAR);
int month=d.get(Calendar.MONTH);
int day=d.get(Calendar.DAY_OF_MONTH);
//获得日历中的 year month day
DatePickerDialog dlg=new DatePickerDialog(this,this,year,month,day);
//新建一个DatePickerDialog 构造方法中
// (设备上下文,OnDateSetListener时间设置监听器,默认年,默认月,默认日)
dlg.show();
//让DatePickerDialog显示出来


public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth)
//DatePickerDialog 中按钮Set按下时自动调用
TextView txt = (TextView) findViewById(R.id.text);
//通过id获得TextView对象
txt.setText(Integer.toString(year) + "-" +
Integer.toString(monthOfYear) + "-" +
Integer.toString(dayOfMonth));
//设置text



main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_
>
<TextView
android:layout_
android:layout_
android:text="@string/hello"
android:id="@+id/text"
/>

<Button
android:layout_
android:layout_
android:id="@+id/date"
android:text="设置时间"
>
</Button>
</LinearLayout>
参考技术A   package com.solide;
  import java.util.Calendar;
  import android.app.Activity;
  import android.app.TimePickerDialog;
  import android.app.TimePickerDialog.OnTimeSetListener;
  import android.os.Bundle;
  import android.text.format.DateFormat;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.TimePicker;
  public class TestTimeTickerActivity extends Activity implements OnClickListener
  /** Called when the activity is first created. */
  private Calendar c;
  private Button button;
  @Override
  public void onCreate(Bundle savedInstanceState)
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  button = (Button)findViewById(R.id.button);
  button.setOnClickListener(this);
  c = Calendar.getInstance();
  c.setTimeInMillis(System.currentTimeMillis());

  
  @Override
  public void onClick(View v)
  // TODO Auto-generated method stub
  int hour = c.get(Calendar.HOUR_OF_DAY);
  int minute = c.get(Calendar.MINUTE);
  new TimePickerDialog(this, new OnTimeSetListener()
  @Override
  public void onTimeSet(TimePicker view, int hourOfDay, int minute)
  // TODO Auto-generated method stub
  
  
  , hour, minute, DateFormat.is24HourFormat(this)).show();

  
  

  去试试本回答被提问者和网友采纳
参考技术B 我只做过简单的时间设置,你可以重写方法,改变他的设置范围追问

你这个等于没回答。不过我研究出一点了。和你分享下:
private Calendar now = Calendar.getInstance();

DatePicker dp = dialog.getDatePicker();
dp.setMinDate(now.getTime().getTime());

追答

恩,不错

Android 使用 DatePickerDialog 显示时间

效果如下:

**老规矩最后有源码,步骤如下:

  1. 调用 Calendar 类获取年月日**

重点:在最后你会发现月份少了个 1,这是正常的,api 中说这个值原始值为 0,自己加个一就好了。
2. 将年月日的值放入 DatePickerDialog 中

源码如下:

布局文件**

  <TextView
        android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="216dp"
        android:text="点击选择时间"
        android:textSize="20sp"/>

复制代码

java 文件:

public class MainActivity extends Activity 

    private TextView time;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        time.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
             showtime();
            
        );
    

    private void initView() 
        time = (TextView) findViewById(R.id.time);
    
    private void showtime() 
        Calendar calendar = Calendar.getInstance();//调用Calendar类获取年月日
        int  mYear = calendar.get(Calendar.YEAR);//年
        int  mMonth = calendar.get(Calendar.MONTH);//月份要加一个一,这个值的初始值是0。不加会日期会少一月。
        int  mDay = calendar.get(Calendar.DAY_OF_MONTH);//日
        DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() 
            @Override
            public void onDateSet(DatePicker datePicker, int i, int i1, int i2) 
              time.setText(i + "年" + (i1+1) + "月" + i2 + "日");//当选择完后将时间显示,记得月份i1加一

            
        , mYear,mMonth, mDay);//将年月日放入DatePickerDialog中,并将值传给参数

        datePickerDialog.show();//显示dialog

    


本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

以上是关于android DatePickerDialog怎么设置日期选择范围。的主要内容,如果未能解决你的问题,请参考以下文章

对话框android中的datepickerdialog

android笔记:DatePickerDialog日期设置对话框

在 DatePickerDialog (Android) 上验证日期时出现 IllegalArgumentException

android DatePickerDialog怎么设置日期选择范围。

Android DatePickerDialog TimePickerDialog

如何在 DatePickerDialog Android 中禁用今天日期之前的日期?