Android 中的时间日期控件

TextClock

以字符串的形式显示当前时间

更多方法及属性请查看官方API
API17+

在布局文件中添加

<TextClock
    android:id="@+id/textClock"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

TextClock的XML属性:

  • android:format12Hour 指定用于在12小时模式下显示时间和/或日期
  • android:format24Hour 指定用于在24小时模式下显示时间和/或日期
  • android:timeZone 指定要使用的时区

DatePicker

提供一个选择日期的窗口小部件

更多方法及属性请查看官方API

获取系统日期和时间的方法

// 获取日历对象
Calendar calendar = Calendar.getInstance();
// 获取当前对应的年、月、日的信息
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH) + 1;
day = calendar.get(Calendar.DAY_OF_MONTH);
// 获取当前时间信息
hour=calendar.get(Calendar.HOUR_OF_DAY);
minute=calendar.get(Calendar.MINUTE);

在布局文件中添加

<DatePicker
    android:id="@+id/dp_pro"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:datePickerMode="spinner" />

XML属性:

  • android:calendarTextColor 日历列表中的文本颜色。
  • android:calendarViewShown=”true|fase” 设置该DatePicker是否显示CalendarView组件,只对spinner模式下有效。
  • android:datePickerMode=”calendar|spinner” 定义DatePicker小部件的外观,该属性在API21之后添加
  • android:dayOfWeekBackground 日期的背景色
  • android:dayOfWeekTextAppearance 日期的文本颜色
  • android:firstDayOfWeek=”integer” 基于日历的一周第一天
  • android:headerBackground 表头选择的日期的背景
  • android:headerDayOfMonthTextAppearance 表头天的文本外观
  • android:headerMonthTextAppearance 表头月的文本外观
  • android:headerYearTextAppearance 表头年的文本外观
  • android:maxDate=”string using \\” 通过以mm / dd / yyyy格式此日历视图中显示的最大的日期。
  • android:minDate=”string using \\” 通过以mm / dd / yyyy格式此日历视图中示出的最小的日期。
  • android:spinnersShown=”true|false” 设置该日期选择器是否显示Spinner日期选择组件,只在spinner模式下有效
  • android:startYear=”integer” 设置日期选择器允许选择的第一年,如“1940年”。
  • android:endYear=”integer” 设置日期选择器允许选择的最后一年。
  • android:yearListItemTextAppearance 列表中年的文本外观
  • android:yearListSelectorColor 列表中年的选择圆圈的颜色

代码中:

//1.findViewById
DatePicker datePicker = (DatePicker) findViewById(R.id.dp_pro);
//2.使用init()方法初始化DatePicker在刷新Spinner之前显示的日期;并设置OnDateChangedListener,监听器可以为空。这里使用activity implements OnDateChangedListener
datePicker.init(year,monthOfYear,dayOfMonth,this);

//设置OnDateChangedListener后重写的方法,修改DatePicker里的年、月、日时触发
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    if (view.getId()==R.id.dp_pro){
        datePro=year+"-"+(monthOfYear+1)+"-"+dayOfMonth+" ";//这里月份值+1,因为获取的月份值比正常月份值小1
        tvTimePro.setText(datePro+timePro);
        Log.d(TAG, "onDateChanged: "+datePro);
    }else if (view.getId()==R.id.dp_custom){
        dateCustom=year+"-"+(monthOfYear+1)+"-"+dayOfMonth+" ";
        tvTimeCustom.setText(dateCustom+timeCustom);
        Log.d(TAG, "onDateChanged: "+dateCustom);
    }
}

另外DatePicker支持直接输入日期值(长按就可以,仅限于在spinner模式下)

TimePicker

提供一个选择时间的窗口小部件

更多方法及属性请查看官方API

在布局文件中添加

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

TimePicker的XML属性:

  • android:timePickerMode=”spinner|clock” TimePicker显示样式,分别对应spinner样式和时钟样式

代码中:

timePicker_custom = (TimePicker) findViewById(R.id.tp_custom);
        //24小时制
        timePicker_custom.setIs24HourView(true);
        //为timePicker添加监听器,不可为空。修改TimePicker里的时、分时触发
        timePicker_custom.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                timeCustom=hourOfDay+":"+minute;
                tvTimeCustom.setText(dateCustom+timeCustom);
                Log.d(TAG, "onTimeChanged: "+timeCustom);
            }
        });

TimePicker也支持直接输入日期值(长按就可以,仅限于在spinner模式下)

Chronometer

Class that implements a simple timer

更多方法及属性请查看官方API

在布局文件中添加

Chronometer的XML属性:

  • android:countDown=”true|false” 指定此计时器是否倒计时或从基数计数
  • android:format=”string” 格式字符串:如果指定,计时器将显示此字符串,第一个“%s”由“MM:SS”或“H:MM:SS”形式的当前定时器值替换

代码中:

Chronometer chron= (Chronometer) findViewById(R.id.chron);
//设置递增定时器参考的时间为系统时钟过去实时时间
chron.setBase(SystemClock.elapsedRealtime());
chron.start();
//设置当计时器更改时要调用的侦听器
chron.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometer) {
            //action
        }
    });
ToggleButton tbn_chro = (ToggleButton) findViewById(R.id.tbn_chro);
tbn_chro.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            // 开始计数。 这不影响从setBase(long)设置的基数,只是视图显示。
            // 计时器通过定期将消息调度到处理程序,即使Widget不可见。 为了确保不会发生资源泄漏,
            // 用户应确保每个start()调用都具有对stop()的相互调用。
            chron.start();
        } else {
            // 停止计数。这不影响从setBase(long)设置的基数,只是视图显示。
            // 这将停止向处理程序发送的消息,通过start()有效地释放将按照计时器运行的资源。
            chron.stop();
        }
    }
});

CalendarView

CalendarView是用于显示和选择日期的日历小部件。此日历支持的日期范围是可配置的

在布局文件中添加

<CalendarView
    android:id="@+id/cal_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

CalendarView的XML属性

  • android:dateTextAppearance calendar中天数的文本外观
  • android:firstDayOfWeek=”integer” 基于日历的一周第一天
  • android:maxDate=”string using \\” 通过以mm / dd / yyyy格式此日历视图中显示的最大的日期。
  • android:minDate=”string using \\” 通过以mm / dd / yyyy格式此日历视图中示出的最小的日期。

代码中:

CalendarView cal = (CalendarView) findViewById(R.id.cal_view);
cal.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
    @Override
    public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
        //action
    }
});

DatePickerDialog和TimePickerDialog

与DatePicker和TimePicker的区别在于DatePicker和TimePicker是显示在屏幕画面上的,而DatePickerDialog和TimePickerDialog对象则是以弹出Dialog的方式来显示

使用方法

new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            Toast.makeText(MainActivity.this, "DatePickerDialog "+year + "-" + (month + 1) + "-" + dayOfMonth, Toast.LENGTH_SHORT).show();
        }
    }, year, month, day).show();

new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            Toast.makeText(MainActivity.this, "TimePickerDialog " + hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show();
        }
    }, hour, minute, true).show();

其他Picker之NumberPicker

用于数字选择

在布局文件中添加:

<NumberPicker
     android:id="@+id/num_pick"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"/>

代码中:

NumberPicker numberPicker= (NumberPicker) findViewById(R.id.num_pick);
// 设置NumberPicker属性
numberPicker.setMinValue(minNum);
numberPicker.setMaxValue(maxNum);
numberPicker.setValue(currentNum);

// 监听数值改变事件
numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        currentNum = newVal;
        Toast.makeText(MainActivity.this, "currentNum= "+currentNum, Toast.LENGTH_SHORT).show();
    }
});
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值