【15】时间、日期和日历

来源:互联网 发布:量子计算机人工智能股 编辑:程序博客网 时间:2024/05/16 04:15

1、TimePickerDialog——时间选择对话框

创建TimePickerDialog时间选择对话框:
a、创建一个类继承DialogFragment;
b、重写onCreateDialog()方法,返回一个TimePickerDialog对象;
c、实现TimePickerDialog的OnTimeSetListener接口来接受一个回调,当用户设置时间。
下面是一个简单的例子,运行效果为:
实现代码:
<span style="color:#000000;">package com.example.practice;import android.app.DialogFragment;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.TextView;public class MainActivity_TimePickerDialog extends AppCompatActivity {    private TextView tv_time;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_time_picker_fragment);        tv_time = (TextView) findViewById(R.id.textView_time);    }    /**     * 设置时间的按钮的单击事件     *     * @param view     */    public void showTimePickerDialogClick(View view) {        DialogFragment timePickerFragment = new TimePickerFragment();        timePickerFragment.show(getFragmentManager(), "timePicker");    }    /**     * 设置时间值     *     * @param hour   小时     * @param minute 分钟     */    public void setTimeValue(int hour, int minute) {        tv_time.setText(hour + ":" + minute);    }}</span>

布局文件:
<span style="color:#000000;"><?xml version="1.0" encoding="utf-8"?><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity_TimePickerDialog">    <TextView        android:id="@+id/textView_time"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="not time"        android:textSize="20sp" />    <Button        android:id="@+id/button_setTime"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/textView_time"        android:onClick="showTimePickerDialogClick"        android:text="设置时间" /></RelativeLayout></span>

自定义的TimePickerFragment.java文件:
package com.example.practice;import android.app.Dialog;import android.app.DialogFragment;//注意要继承app包下的(继承v4包下的有错,我试过了!)import android.app.TimePickerDialog;import android.os.Bundle;import android.widget.TimePicker;import java.util.Calendar;/** * 创建该类的目的是来显示时间对话框用的 * Created by Administrator on 2016/2/24 0024. */public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {    private int hour, minute;    private MainActivity_TimePickerDialog mainActivity;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //通过getActivity方法获取该Fragment所依赖的Activity对象        mainActivity = (MainActivity_TimePickerDialog) getActivity();        //注意:一个Fragment必须依赖于一个Activity才可以存在的。    }    /**     * 创建时间对话框的事件方法:该方法会在MainActivity的按钮事件中调用show方法时,     * 会检查是否已存在Dialog,当不存在时会触发该事件,否则直接显示。     *     * @param savedInstanceState     * @return     */    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        Calendar calendar = Calendar.getInstance();//获取当前系统时间        hour = calendar.get(Calendar.HOUR_OF_DAY);//获取小时        minute = calendar.get(Calendar.MINUTE);//获取分钟        //创建时间对话框,参数(上下文,设置时间事件,小时,分钟,是否为24小时)        TimePickerDialog dialog = new TimePickerDialog(mainActivity, this, hour, minute, true);        return dialog;    }    /**     * 显示完对话框后,自己再重新设置的时间     * (时间对话框中的“完成”按钮的单击事件)     *     * @param view     * @param hourOfDay 小时     * @param minute    分钟     */    @Override    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {        hour = hourOfDay;        this.minute = minute;        //此处把用户设置的时间值设置到界面的TextView组件上        mainActivity.setTimeValue(hour, this.minute);    }}
注意:DialogFragment要继承app包下!

2、DatePickerDialog——日期选择对话框

设置思路和TimePickerDialog基本一样~
创建DatePickerDialog日期选择对话框:
a、创建一个类继承DialogFragment;
b、重写onCreateDialog()方法,返回一个DatePickerDialog对象;
c、实现DatePickerDialog的OnDateSetListener接口来接受一个回调,当用户设置日期。
下面是一个简单的例子,运行效果为:
 
实现代码:
package com.example.practice;import android.app.DialogFragment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;import static com.example.practice.R.id.textView_date;public class MainActivity_DatePickerDialog extends AppCompatActivity {    private TextView tv_date;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_date_picker_dialog);        tv_date = (TextView) findViewById(textView_date);    }    /**     * 设置日期的按钮单击事件     *     * @param view     */    public void showDatePickerDialogClick(View view) {        DialogFragment dialogFragment = new DatePickerFragment();        dialogFragment.show(getFragmentManager(), "datePicker");    }    /**     * 设置日起至     *     * @param year  年     * @param month 月     * @param day   日     */    public void setDateValue(int year, int month, int day) {        //注意:这边的月份是从0算起的,所以要显示的时候每次都要加1才是正确的月份        tv_date.setText(year + "年" + (month + 1) + "月" + day + "日");    }}
 
布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.practice.MainActivity_DatePickerDialog">    <TextView        android:id="@+id/textView_date"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="not date"        android:textSize="20sp" />    <Button        android:id="@+id/button_setDate"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/textView_date"        android:onClick="showDatePickerDialogClick"        android:text="设置日期" /></RelativeLayout>

自定义的DatePickerFragment.java文件:
package com.example.practice;import android.app.DatePickerDialog;import android.app.Dialog;import android.app.DialogFragment;import android.os.Bundle;import android.widget.DatePicker;import java.util.Calendar;/** * 创建该类的目的是来显示日期对话框用的 * Created by Administrator on 2016/2/24 0024. */public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {    private int year, month, day;    private MainActivity_DatePickerDialog mainActivity;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //通过getActivity方法获取该Fragment所依赖的Activity对象        mainActivity = (MainActivity_DatePickerDialog) getActivity();        //注意:一个Fragment必须依赖于一个Activity才可以存在的。    }    /**     * 创建日期对话框的事件方法:该方法会在MainActivity的按钮事件中调用show方法时,     * 会检查是否已存在Dialog,当不存在时会触发该事件,否则直接显示。     *     * @param savedInstanceState     * @return     */    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        Calendar calendar = Calendar.getInstance();//获取当前系统时间        year = calendar.get(Calendar.YEAR);//获取年        month = calendar.get(Calendar.MONTH);//获取月        day = calendar.get(Calendar.DAY_OF_MONTH);//获取日        //创建日期对话框,参数(上下文,设置日期事件,年,月,日)        DatePickerDialog dialog = new DatePickerDialog(mainActivity, this, year, month, day);        return dialog;    }    /**     * 显示完对话框后,自己再重新设置的日期     * (日期对话框中的“完成”按钮的单击事件)     *     * @param view     * @param year        年     * @param monthOfYear 月     * @param dayOfMonth  日     */    @Override    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {        this.year = year;        month = monthOfYear;        day = dayOfMonth;        mainActivity.setDateValue(this.year, month, day);    }}
注意:DialogFragment要继承app包下!

3、TimePicker——时间选择器

我们可以看到,下面是android 5.0的TimePicker的样子:
该组件只有一个属性:
android:timePickerMode:组件外观,同样可选值:spinner和clock(默认)
下面是一个简单的例子,运行效果如下所示:
实现代码:
package com.example.practice;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TimePicker;import android.widget.Toast;public class MainActivity_TimePicker extends AppCompatActivity {    private TimePicker timePicker;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_time_picker);        timePicker = (TimePicker) findViewById(R.id.timePicker);        timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {            @Override            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {                Toast.makeText(MainActivity_TimePicker.this, hourOfDay + ":" + minute, Toast.LENGTH_LONG).show();            }        });    }}

布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity_TimePicker">    <TimePicker        android:id="@+id/timePicker"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></RelativeLayout>
 

4、DatePicker——日期选择器

一样看下android 5.0的DatePicker的样子:
该组件的属性有:
android:calendarTextColor: 日历列表的文本的颜色
android:calendarViewShown:是否显示日历视图
android:datePickerMode:组件外观,可选值:spinner,calendar,前者效果如下,默认效果是后者
android:dayOfWeekBackground:顶部星期几的背景颜色
android:dayOfWeekTextAppearance:顶部星期几的文字颜色
android:endYear:去年(内容)比如2010
android:firstDayOfWeek:设置日历列表以星期几开头
android:headerBackground:整个头部的背景颜色
android:headerDayOfMonthTextAppearance:头部日期字体的颜色
android:headerMonthTextAppearance:头部月份的字体颜色
android:headerYearTextAppearance:头部年的字体颜色
android:maxDate:最大日期显示在这个日历视图mm / dd / yyyy格式
android:maxDate:最小日期显示在这个日历视图mm / dd / yyyy格式
android:spinnersShown:是否显示spinner
android:startYear:设置第一年(内容) ,比如19940年
android:yearListItemTextAppearance:列表的文本出现在列表中
android:yearListSelectorColor:年列表选择的颜色

下面是一个简单的例子,运行效果如下所示:
 
实现代码:
package com.example.practice;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.DatePicker;import android.widget.Toast;import java.util.Calendar;public class MainActivity_DatePicker extends AppCompatActivity implements DatePicker.OnDateChangedListener {    private DatePicker datePicker;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_date_picker);        datePicker = (DatePicker) findViewById(R.id.datePicker);        Calendar calendar = Calendar.getInstance();//获取当前系统时间        int year = calendar.get(Calendar.YEAR);        int month = calendar.get(Calendar.MONTH);        int day = calendar.get(Calendar.DAY_OF_MONTH);        //初始化日期选择器,参数(年,月,日,日期改变的监听事件)        datePicker.init(year, month, day, this);    }    @Override    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {        Toast.makeText(this, year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日", Toast.LENGTH_LONG).                show();//注意这边显示的时候要记得月份加一    }}

布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.practice.MainActivity_DatePicker">    <DatePicker        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/datePicker" /></RelativeLayout>
 

5、Calendar——日历视图

该组件的属性有:
android:firstDayOfWeek:设置一个星期的第一天 
android:maxDate :最大的日期显示在这个日历视图mm / dd / yyyy格式 
android:minDate:最小的日期显示在这个日历视图mm / dd / yyyy格式 
android:weekDayTextAppearance:工作日的文本出现在日历标题缩写 

下面是一个简单的例子,运行效果如下所示:
实现代码:
package com.example.practice;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.CalendarView;import android.widget.Toast;import java.util.Calendar;public class MainActivity_Calendar extends AppCompatActivity {    private CalendarView calendarView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_calendar);        calendarView = (CalendarView) findViewById(R.id.calendarView);        calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {            @Override            public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {                Toast.makeText(MainActivity_Calendar.this, year + "年" + month + "月"                        + dayOfMonth + "日", Toast.LENGTH_LONG).show();            }        });    }}

布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.practice.MainActivity_Calendar">    <CalendarView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/calendarView" /></RelativeLayout>

0 0