Android TimePickerDialog样式配置与TimePicker模式选择
习惯性的,把要说的内容先总结一下:
TimePicker有两种模式:spinner 和clock,可通过如下方式配置:
<TimePicker
android:timePickerMode = "spinner"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
或者
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) {
}
},,,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文件中搜索该变量,可以看到:
<attr name="timePickerMode">
<!-- Time picker with spinner controls to select the time. -->
<enum name="spinner" value="" />
<!-- Time picker with clock face to select the time. -->
<enum name="clock" value="" />
</attr>
这意味着可以在xml文件中给TimePicker指定特定的模式,就像文章开头做的那样。如此,就实现了自己想要的TimePickerDialog的样式。
Android TimePickerDialog样式配置与TimePicker模式选择的更多相关文章
- Android 8.1 关机充电动画(一)模式选择
system:Android 8.1 platform:RK3326/PX30 uboot kernel Android 8.1 关机充电动画(一)模式选择 Android 8.1 关机充电动画(二) ...
- MySQL binlog日志三种模式选择及配置
在认识binlog日志三种模式前,先了解一下解析binlog日志的命令工mysqlbinlog.mysqlbinlog工具的作用是解析mysql的二进制binlog日志内容,把二进制日志解析成可以在M ...
- Mac系统cocos2dx + android 开发环境配置
Mac系统cocos2dx + android 开发环境配置 /****************************************************** 这遍文章主要转载自:htt ...
- Android 自定义支持快速搜索筛选的选择控件(一)
Android 自定义支持快速搜索筛选的选择控件 项目中遇到选择控件选项过多,需要快速查找匹配的情况. 做了简单的Demo,效果图如下: 源码地址:https://github.com/whieenz ...
- Ubuntu虚拟机+ROS+Android开发环境配置笔记
Ubuntu虚拟机+ROS+Android开发环境配置笔记 虚拟机设置: 1.本地环境:Windows 7:VMWare:联网 2.虚拟环境 :Ubuntu 14.04. 比較稳定,且支持非常多ROS ...
- Android Studio最新配置教程2016
http://blog.csdn.net/wen_demo 一.Android studio 基本简单介绍 1.Android studio和Eclipse的差别: 1.Studio中有Project ...
- Gradle系列之Android Gradle高级配置
本篇文章主要在之前学习的基础上,从实际开发的角度学习如何对 Android Gradle 来进行自定义以满足不同的开发需求,下面是 Gradle 系列的几篇文章: Gradle系列之初识Gradle ...
- Android开发环境配置
由于公司项目需要,最近转做Android开发,这里我来介绍一下Android开发环境的配置过程. 首先,需要下载所需要的软件工具,如下所示: 1.Java:开发基础环境,JDK和JRE这两个都要下载的 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...
随机推荐
- 【新产品发布】《GM1001 4~20mA 高精度电流采集模块》
一.主要特性 1.测量精度高达±0.01%FS±0.002mA: 2.采样电阻仅10欧姆(20mA时压降仅0.2V),对被测系统影响 微乎其微: 3.差分输入,可测量正反电流无需改动硬件,使用方便: ...
- MONGODB 计算机服务
安装完成后,在 BIN目录执行如下 E:\APMServ5.2.6\MongoDb\bin>mongod --logpath E:\APMServ5.2.6\MongoDb\logs\Mongo ...
- 内存调试工具Electric Fence
源码下载地址 注:官方地址下载不了,可能不再维护了,此是一个老项目 efence中相关环境变量控制: 302 /* 303 * See if the user wants to allow mallo ...
- [ZZ] KlayGE 游戏引擎 之 Order Independent Transparency(OIT)
转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2233 http://dogasshole.iteye.com/blog/1429665 ht ...
- PHP 设计模式 笔记与总结(8)策略模式
① 策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式. ② 实际应用举例,假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示 ...
- PHP程序员必须清楚的问题汇总
PHP程序员必须清楚的问题汇总 投稿:hebedich 字体:[增加 减小] 类型:转载 这篇文章主要介绍了PHP程序员必须清楚的问题汇总,需要的朋友可以参考下 你是否正在准备寻找一份PH ...
- 达内培训:php在线端口扫描器
达内培训:php在线端口扫描器 [来源] 达内 [编辑] 达内 [时间]2012-12-21 这个扫描器很简单.就是用了一个数组来定义端口的相关信息,原理就是用fsockopen函数连接,如 ...
- 【转载】loadrunner使用system()函数调用Tesseract-OCR识别验证码遇到的问题
俗话说前人栽树,后人乘凉,此话一点不假,结合云层的一遍文章:http://bbs.51testing.com/thread-533920-1-1.html,知道还有一个Tesseract-OCR可以用 ...
- sql server 数据库连接配置在外面 如何读取
注意:web运行读取要把配置文件放在WEB-INF下面 Driver=com.microsoft.sqlserver.jdbc.SQLServerDriverurl=jdbc:sqlserver:// ...
- Android Gradle 编译错误Java finished with non-zero exit value 2
出现这个错误主要有两类错误 依赖包重复 方法数超过65K 针对第一种错误,可能是由于build.gradle里写了 compile fileTree(dir: 'libs', include: ['* ...