美文网首页
Android日期选择器DatePicker和时间选择器Time

Android日期选择器DatePicker和时间选择器Time

作者: 古早味蛋糕 | 来源:发表于2022-09-13 08:33 被阅读0次

Android中关于日期和时间的几个相关控件的使用,包括DatePicker(日期选择控件)、TimePicker(时间选择控件)、DatePickerDialog(日期选择对话框)、TimePickerDialog(时间选择对话框);
一、DatePicker、TimePicker
 DatePicker、TimePicker都继承自android.widget.FrameLayout,并且默认展示风格、与操作风格也类似。DatePicker用于展示一个日期选择控件,TimePicker用于展示一个时间选择控件。
1、DatePicker可以通过设置属性来确定日期选择范围,也可以通过定义好的方法获取到当前选中的时间,并且在修改日期的时候,有响应的事件对其进行响应。
DatePicker常用的属性:
android:calendarViewShown:设置该日期选择是否显示CalendarView组件。
android:endYear:设置日期选择器允许选择的最后一年。
android:maxDate:设置该日期选择器的最大日期。以mm/dd/yyyy格式指定最大日期。
android:minDate:设置该日期选择器的最小日期。以mm/dd/yyyy格式指定最小日期。
android:spinnersShown:设置该日期选择器是否显示Spinner日期选择组件。
android:startYear:设置日期选择器允许选择的第一年。
 DatePicker的方法而言,除了常用获取属性的setter、getter方法之外,还需要特别注意一个初始化的方法init()方法,用于做DatePicker控件的初始化,并且设置日期被修改后,回调的响应事件。此方法的签名如下:

init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)

从上面的init()方法可以看到,DatePicker被修改时响应的事件是DatePicker.OnDateChangedListener事件,如果要响应此事件,需要实现其中的onDateChanged()方法,其中参数从签名即可了解意思,这里不再累述。

onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
datepicker_layout.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TimePickerActivity">
<DatePicker
    android:id="@+id/date_picker"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:datePickerMode="spinner"
    android:calendarViewShown="true"
    android:layout_gravity="center_horizontal"
    />
</LinearLayout>

相应的业务实现类:

public class TimePickerActivity extends AppCompatActivity {
    private DatePicker mDatePicker;//日期选择器
    private Calendar mCalendar;//日历
    private int mYear;//年
    private int mMonth;//月
    private int mDay;//日
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_time_picker);
        mCalendar = Calendar.getInstance();
        //获取对应的年月日
        mYear = mCalendar.get(Calendar.YEAR);
        mMonth = mCalendar.get(Calendar.MONTH);
        mDay = mCalendar.get(Calendar.DAY_OF_MONTH);
        //绑定
        mDatePicker = findViewById(R.id.date_picker);
        //初始化
        mDatePicker.init(mYear, mMonth, mDay, new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker datePicker, int year, int month, int day) {
                Toast.makeText(TimePickerActivity.this,year+"年"+(month+1)+"月"+day+"日",Toast.LENGTH_LONG).show();
            }
        });
    }
}

2、TimePicker
TimePicke主要是供用户选择时间,在FrameLayout的基础上提供了一些方法来获取当前用户所选择的时间,如果程序需要获取用户选择的时间则可通过为TimePicker添加 OnTimeChangedListener 进行监听来实现。
 TimePicker常用方法有如下几个:
 is24HourView():判断是否为24小时制。
 setIs24HourView():设置是否为24小时制显示。
 getCurrentXxx():获取当前时间。
 setCurrentXxx():设置当前时间。
 setOnTimeChangedListener():设置时间被修改的回调方法。
 TimePicker控件被修改的回调方法,通过setOnTimeChangedListener()方法设置,其传递一个TimePicker.OnTimeChangedListener接口,需要实现其中的onTimeChanged()方法。
下面是相应的XML文件:

    <TimePicker
        android:id="@+id/time_picker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:timePickerMode="spinner"
        /> 

相应的业务实现:

       private TimePicker mTimePicker;//时间选择器
        //时间选择器绑定
        mTimePicker = findViewById(R.id.time_picker);
        mTimePicker.setIs24HourView(true);
        mTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
        @Override
        public void onTimeChanged(TimePicker view, int hourOfDay,
                                  int minute) {
            Toast.makeText(TimePickerActivity.this,
                    hourOfDay + "小时" + minute + "分钟",
                    Toast.LENGTH_SHORT).show();
        }
    });

二、DatePickerDialog、TimePickerDialog
 DatePickerDialog\TimePickerDialog是两个对话框控件,一个弹出对话框用于选择日期,一个弹出对话框用于选择时间,都继承自android.app.AlertDialog。

这两个控件的开发过程,其主要就是开发其选择后日期或时间后,相应的事件。

对于DatePickeDialog而言,通过构造函数可以设置弹出的日期控件的初始值,并且可以指定选中日期后,回调事件的实现,构造函数的签名如下:

DatePickerDialog(Context context, int Theme,DatePickerDialog.OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)

其中DatePickerDialog.OnDateSetListener为日期选中的响应事件,其他为日期弹出窗口初始化的日期,对于一个OnDateSetListener接口而言,需要实现其中的onDateSet()方法,在这个方法内,可以得到用户选中的日期。

对于TimePickerDialog而言,同样可以通过构造函数设置初始值,并且设定选中日期后,回调事件的实现,构造函数的签名如下:

TimePickerDialog(Context context, int Theme,TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)

其中TimePickerDialog.OnTimeSetListener为时间选中的响应事件,其他为时间弹出窗口初始化的时间,对于一个OnTimeSetListener接口而言,需要实现其中的onTimeSet()方法,在这个方法内,可以得到用户选中的时间。
相应业务实现:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TimePickerActivity">
<Button
    android:id="@+id/but"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="dateClick"
    android:text="点击" />

<Button
    android:id="@+id/but2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="timeClick"
    android:text="点击" />
</LinearLayout>

java类实现:

public void dateClick(View v) {

    Calendar calendar = Calendar.getInstance();

    DatePickerDialog datePickerDialog = new DatePickerDialog(
            TimePickerActivity.this,AlertDialog.THEME_HOLO_LIGHT, new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker datePicker, int year,
                              int monthOfYear, int dayOfMonth) {
            //获取选中时间进行相应的业务实现
            Toast.makeText(TimePickerActivity.this, year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日", Toast.LENGTH_LONG).show();
        }
    }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH));
    datePickerDialog.show();


}

public void timeClick(View v) {

    Calendar calendar = Calendar.getInstance();
    TimePickerDialog dialog = new TimePickerDialog(TimePickerActivity.this,AlertDialog.THEME_HOLO_LIGHT,  new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker timePicker, int hour, int minute) {
            //获取选中时间进行相应的业务实现
            Toast.makeText(TimePickerActivity.this,
                    hour + "小时" + minute + "分钟",
                    Toast.LENGTH_SHORT).show();

        }
    }, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true); //true为24小时制

    dialog.show();
}

相关文章

网友评论

      本文标题:Android日期选择器DatePicker和时间选择器Time

      本文链接:https://www.haomeiwen.com/subject/iaehortx.html