Android 日期控件(DatePickerDialog)与时间控件(TimePickerDialog)的使用

时间:2024-04-08 11:29:26


在Android中提供日期和时间的控件是DataPicker与TimePicker,不过这两个控件并非弹窗模式,而是直接在页面上占据一块区域,并不会自动关闭,因此不适合直接使用,实际开发中用的是已经封装好的对话框DatePickerDialog与TimePickerDialog


运行效果如下图


Android 日期控件(DatePickerDialog)与时间控件(TimePickerDialog)的使用Android 日期控件(DatePickerDialog)与时间控件(TimePickerDialog)的使用Android 日期控件(DatePickerDialog)与时间控件(TimePickerDialog)的使用

DatePickerDialog

DatePickerDialog相当于在AlertDialog上加载了DatePicker,用起来更简单,只需调用构造函数设置一下当前年、月、日,然后调用show方法即可弹出日期对话框,日期选择时间有监听器OnDateSetListener负责相应,在该监听实现的OnDateSet方法中,开发者能够获得用户选择的具体日期,这里需要注意的是OnDateSet方法的月份参数,该参数的起始值不是1而是0,也就是说,一月份对应的是参数0,十二月份对应的是参数11,如果实在不理解,记住这里的月份值要加1就行了

TimePickerDialog

该对话框的用法类似DatePickerDialog,不同之处主要有两个

(1)      构造函数传的是当前的小时与分钟,最后一个参数表示是否采用二十四小时进制,true表示小时的数值范围为0~23

(2)      时间选择监听器是OnTimeSetListener,对应需要实现的方法是onTimeSet,在该方法中可获得用户选好的小时和分钟

下面是两个控件的使用方法

XML代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="sxpi.com.myapplication.MainActivity">

    <TextView
        android:id="@+id/dateText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Date"
        android:textSize="22sp" />
    <TextView
        android:id="@+id/timeText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Time"
        android:textSize="22sp" />

</LinearLayout>

程序代码
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.icu.util.Calendar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends AppCompatActivity implements
        View.OnClickListener,
        DatePickerDialog.OnDateSetListener,
        TimePickerDialog.OnTimeSetListener{
    TextView dateText,timeText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dateText=(TextView)findViewById(R.id.dateText);
        timeText=(TextView)findViewById(R.id.timeText);
        dateText.setOnClickListener(this);
        timeText.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v.getId()==R.id.dateText){
            Calendar calendar=Calendar.getInstance();
            DatePickerDialog dialog = new DatePickerDialog(this,this,
                    calendar.get(Calendar.YEAR),
                    calendar.get(Calendar.MONTH),
                    calendar.get(Calendar.DAY_OF_MONTH));
            dialog.show();
        }
        if (v.getId()==R.id.timeText){
            Calendar calendar=Calendar.getInstance();
            TimePickerDialog dialog=new TimePickerDialog(this,this,
                    calendar.get(Calendar.HOUR_OF_DAY),
                    calendar.get(Calendar.MINUTE),
                    true);
            dialog.show();
        }
    }

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        String desc=String.format("您选择的时间是%d时%d分",hourOfDay,minute);
        timeText.setText(desc);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        String desc=String.format("您选择的日期是%d年%d月%d日",year,month+1,dayOfMonth);
        dateText.setText(desc);
    }

}