TimePickerDialog样式配置与TimePicker模式选择

原创 2016年06月01日 20:57:28

习惯性的,把要说的内容先总结一下:

TimePicker有两种模式:spinner 和clock,可通过如下方式配置:

    <TimePicker
        android:timePickerMode = "spinner"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </TimePicker>
或者
android:timePickerMode = "clock"
这两种模式对应的时间的选择一个是模拟的Clock,一个是类似spinner的方式。

另一个内容是TimePickerDialog的样式。TimePickerDialog可以配置很多种样式,可以直接在构造函数中来配置。代码如下:

timePickerDialog = new TimePickerDialog(this, android.R.style.Theme_DeviceDefault_Light_Dialog,new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

            }
        },0,0,false);
        timePickerDialog.setTitle("pick");
        timePickerDialog.show();
也可以不明确指定样式,把上面构造函数的第二个参数去掉就好了。这里,我看到很多代码都没有第二个参数,所以这里把它提出来。

所以,以上就是我要说的所有内容。那么这么简单的东西,我为什么要把它专门写一篇博客呢?原因是这样的:

Android5.0的时候,我使用TimePickerDialog时,外观是这样的:






而到了android6.0的时候,同样的代码,TimePickerDialog的样式是这样的:

这让我很诧异,我尝试在系统源码中寻找答案。TimePickerDialog的源码在:frameworks\base\core\java\android\app下,源码很简单,我就不贴出来了,TimePickerDialog中使用了TimePicker,TimePicker的源码在:frameworks\base\core\java\android\widget。在其构造函数中:

    public TimePicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

        final TypedArray a = context.obtainStyledAttributes(
                attrs, R.styleable.TimePicker, defStyleAttr, defStyleRes);
        final int mode = a.getInt(R.styleable.TimePicker_timePickerMode, MODE_SPINNER);
        a.recycle();
        switch (mode) {
            case MODE_CLOCK:
                mDelegate = new TimePickerClockDelegate(
                        this, context, attrs, defStyleAttr, defStyleRes);
                break;
            case MODE_SPINNER:
            default:
                mDelegate = new TimePickerSpinnerDelegate(
                        this, context, attrs, defStyleAttr, defStyleRes);
                break;
        }
    }
可以看到TimePicker有两种模式:MODE_CLOCK和MODE_SPINNER。我猜想我需要的是spinner,所以我就在这里强制把mode配置为MODE_SPINNER,然后更新完系统Jar包后发现果不其然,这个时候TimePickerDialog变成了这样:

这时候可以看到明显变了一种模式,但是这种模式还不是我想要的,于是我百度TimePickerDialog主题配置,但令我失望的是并没有找到相关的内容,于是我尝试配置
TimePickerDialog构造函数的第二个样式,也就是给TimePickerDialog指定特定的Theme,果然,每次指定完后发现TimePickerDialog的样子都有变化,当我把它配置为
android.R.style.Theme_DeviceDefault_Light_Dialog时,我想要的效果出现了,也就是开始的第一张照片所展示的样式。这个时候,回过头来,很明显在代码中给TimePickerm
指定特定的样式不是明智的选择,通过查看源码发现TimePicker的构造函数中获取mode的方式是:
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TimePicker, defStyleAttr, defStyleRes);
final int mode = a.getInt(R.styleable.TimePicker_timePickerMode, MODE_SPINNER);



从这里可以看出可以看到系统给TimerPicker自定义了属性:timePickerMode,如果这里看不明白,可以百度下view自定义属性试试。然后在res/value/attr.xml文件中搜索该变量,可以看到:
<span style="font-family: 'Times New Roman';"></span><pre name="code" class="html">        <attr name="timePickerMode">
            <!-- Time picker with spinner controls to select the time. -->
            <enum name="spinner" value="1" />
            <!-- Time picker with clock face to select the time. -->
            <enum name="clock" value="2" />
        </attr>
这意味着可以在xml文件中给TimePicker指定特定的模式,就像文章开头做的那样。如此,就实现了自己想要的TimePickerDialog的样式。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

TimePickerDialog使用

TimePickerDialog使用

关于TimePickerDialog里的取消按钮

最近在做一个功能,需要用到时间选择器。但里面出现了一个问题,在模拟器(4.4)里,时间选择器显示的结果是只有一个“完成”的按钮,但在我的真机(4.1)里却多了个“取消”按钮。本来之前我是在onTime...

Android中DatePickerDialog对话框和TimePickerDialog对话框的使用

DatePickerDialog对话框和TimePickerDialog对话框比单独的DatePicker组件和TimePicker组件更好用,用法也比较简单,下面通过一个简单实例来演示它们的使用: ...

Android中TimePickerDialog的使用

TimePickerDialog   Android的DatePickerDiaolog是弹出时间管理的窗口,DatePickerDiaolog描述的年月日时间;,与TimePickerDiaolog...

Android的日期DatePickerDialog和时间TimePickerDialog简单使用

日期DatePickerDialog的使用:public void showDateDialog() { Calendar d = Calendar.getInstance(Local...

Android开发之DatePickerDialog与TimePickerDialog的功能和用法详解

DatePickerDialog与TimePickerDialog的功能比较简单,用法也很简单,只要下面两步即可。 通过new关键字创建DatePickerDialog、TimePickerDial...

组件的使用(四)DatePickerDialog和TimePickerDialog的使用

这两个组件的使用都需要获得当前日期或时间,实现方法是获得一个Calender实例(调用getInstance()实例化)DatePickerDialog的使用 Calendar calenda...

Android基础入门教程——2.3.12 Date & Time组件(下)

Android基础入门教程——2.3.12 Date & Time组件(下) 本节引言: 1.DatePicker(日期选择器) 2.TimePicker(时间选择器) 3.CalendarView(...

Android开发小知识-TimePickerDialog和DatePickerDialog的使用

须知compileSdkVersion 23 buildToolsVersion 23.0.2 minSdkVersion 15 targetSdkVersion 23本例使用DialogFra...

android 时间对话框 TimePickerDialog详细介绍

个人在做提醒功能的时候用到了TimePickerDialog对话框,查阅了很多技术资料,但是感觉很多东西都说的不是很详细,并且很多地方,都有不完善的地方,比如有弹出对话框得到的不是系统当前的时间,而是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)