关于调整TimePicker, DatePicker的大小,样式
最近在做一个时间选择器,想把要DatePicker和TimePicker放在一起使用,无赖他们的大小样式是被Google写死了,找不到相应的属性来设置,自己花了点时间写了一个使用的Demo,运行的效果如下。

首先看布局
<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="wrap_content"
tools:context=".TimeActivity" > <NumberPicker
android:id="@+id/date_picker"
android:layout_width="100dip"
android:layout_height="match_parent"
android:layout_margin="10dip"
/> <TimePicker
android:id="@+id/time_picker"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="10dip"
/> </LinearLayout>
左边使用了一个NumberPicker替换DatePicker的使用,只显示月日星期
datePicker = (NumberPicker)findViewById(R.id.date_picker);
datePicker.setMinValue(1);
datePicker.setMaxValue(365); calendar = Calendar.getInstance();
calendar.setLenient(true);
Calendar tempCal = (Calendar) calendar.clone();
long curTime = tempCal.getTimeInMillis();
int curDay = calendar.get(Calendar.DAY_OF_YEAR);
//此处简单的使用365代表全年的天数
String[] displayedValues = new String[365];
for (int i = 0; i < 365; i++)
{
tempCal = add(curTime, i - curDay + 1, Calendar.DAY_OF_MONTH);
//格式化为月日星期
displayedValues[i] = String.format("%tb %td %ta", tempCal, tempCal, tempCal);
}
datePicker.setDisplayedValues(displayedValues);
datePicker.setValue(calendar.get(Calendar.DAY_OF_YEAR));
右边使用24小时制的TimePicker, 显示小时和分钟的NumberPicker的(TimePicker实际上就是由NumberPicker组成,而NumberPicker在android4.2包含一个EditText控件)
tp = (TimePicker)findViewById(R.id.time_picker);
//设置成24小时,隐藏AM/PM picker
tp.setIs24HourView(true);
//修改TimePicker字体的大小
setNumberPickerTextSize(tp);
//修改TimePicker中NumberPicker的大小
resizeTimerPicker(tp);
修改字体大小的基本思路是:首先由TimePicker控件找到里边的NumberPicker控件,然后再找到里边的EditText控件,从而就可以自由设置它的大小,颜色。 从效果图片可以看到,只能设置当前的字体,上一个/下一个还是原来的大小,此处还需要查看源码找它的原因,如果有人知道也请告之,谢谢。
private List<NumberPicker> findNumberPicker(ViewGroup viewGroup)
{
List<NumberPicker> npList = new ArrayList<NumberPicker>();
View child = null; if (null != viewGroup)
{
for (int i = 0; i < viewGroup.getChildCount(); i++)
{
child = viewGroup.getChildAt(i);
if (child instanceof NumberPicker)
{
npList.add((NumberPicker)child);
}
else if (child instanceof LinearLayout)
{
List<NumberPicker> result = findNumberPicker((ViewGroup)child);
if (result.size() > 0)
{
return result;
}
}
}
} return npList;
} private EditText findEditText(NumberPicker np)
{
if (null != np)
{
for (int i = 0; i < np.getChildCount(); i++)
{
View child = np.getChildAt(i); if (child instanceof EditText)
{
return (EditText)child;
}
}
} return null;
} private void setNumberPickerTextSize(ViewGroup viewGroup)
{
List<NumberPicker> npList = findNumberPicker(viewGroup);
if (null != npList)
{
for (NumberPicker np : npList)
{
EditText et = findEditText(np);
et.setFocusable(false);
et.setGravity(Gravity.CENTER);
et.setTextSize(10); }
}
}
修改TimpePicker的大小,实际上就是设置NumberPicker的大小,由于字体大小设置不完全,故这个地方也不能把NumberPicker设置得太小,只能稍微减小它的大小
private void resizeTimerPicker(TimePicker tp)
{
List<NumberPicker> npList = findNumberPicker(tp); for (NumberPicker np : npList)
{
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(100, LayoutParams.WRAP_CONTENT);
params.setMargins(10, 0, 10, 0);
np.setLayoutParams(params);
}
}
至此,显示月日星期和时间的Picker就形成了,当然你也可以全部都用NumberPicker来完成,那样会麻烦一点,由于时间花的还不够深入,故还有一些欠缺,抱歉,如果看到的人有其他补充请你也告之我,谢谢。
最后补充一种修改Picker的字体颜色的方法
首先在styles.xml 文件里边加入Theme style,设置所有EditText的颜色(因为TimePicker和DatePicker 使用的基本控件都是EditText)
<style name="Theme.picker" parent="android:Theme.Holo.Light">
<item name="android:editTextStyle">@style/Widget.EditText.White</item>
</style> <style name="Widget.EditText.White" parent="@android:style/Widget.EditText">
<item name="android:textColor">@color/red</item>
</style>
然后在应用的 AndroidManifest.xml文件中的Activity下边增加属性 android:theme="@style/Theme.picker",表示该Acitivity使用该theme. 这样Picker就会显示你设置好的颜色。
<activity
android:name="com.example.timewidget.TimeActivity"
android:label="@string/app_name"
android:theme="@style/Theme.picker">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
关于调整TimePicker, DatePicker的大小,样式的更多相关文章
- ExtJs之Ext.form.field.TimePicker DatePicker组合框
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- Android 6.0 中TimePicker显示为滚动样式的方法
在Android6.0中,TimePicker控件的默认样式为转盘的样式,就像这个样子: 如果想要显示为之前的滚动样式的话也很简单,只要在布局文件中设置TimePicker的timePickerMod ...
- CSS font-size字体大小样式属性
设置字体大小CSS单词与语法 基本语法结构: .divcss5{font-size:12px;}设置了文字大小为12px像素Font-size+字体大小数值+单位 单词:font-size语法:fon ...
- el-dialog 如何自定义大小样式
使用属性:custom-class 然后在css中根据这个类型编写指定的样式即可(比如宽高) 举例:
- android学习笔记七——控件(DatePicker、TimePicker、ProgressBar)
DatePicker.TimePicker ==> DatePicker,用于选择日期 TimePicker,用于选择时间 两者均派生与FrameLayout,两者在FrameLayout的基础 ...
- 日期 时间选择器(DatePicker和TimePicker)实现用户选择
日期和时间 作者的设计TimePicker时,大小分布不合理,我调整宽度为match-parent高度为wrap-parent就可以了. public class MainActivity exten ...
- Android5.0 TimePicker,DatePicker恢复成低版本滚动模式
新版中的TimePicker DatePicker是不支持使用遥控器的, 恢复成低版本滚动模式只需要是xml文件加上一句即可: android:datePickerMode="spinner ...
- android中TimePicker和DatePicker的简单使用
package com.example.demo10; import java.util.Calendar; import android.support.v7.app.ActionBarActivi ...
- Android中DatePicker与TimePicker用法讲解(包括DatePickerDialog与TimePickerDialog)
实现效果:将DatePicker和TimePicker修改的日期和时间实时显示在程序标题栏上. 1.通过DatePicker和TimePicker来实现 布局为main.xml <?xml ve ...
随机推荐
- 构造字典:DictionaryBase类和SortedList类
DictionaryBase 类 msdn对DictionaryBase的文档解释 泛型KeyValuePair类 msdnd对泛型KeyValuePair类的文档解释 SortedList类 RUN ...
- 使用gmock白盒测试
提起白盒测试,很多程序员可能觉得就是个书上的概念,很多人写完代码根本没有具体的测试方案,自己觉得可行就提交了,其实这是个很危险的事情,毕竟出了bug,最后要加班的人还是你 ,因此做好白盒测试,100% ...
- windows 10 安装 sql 2005 安装失败
windows 10 安装 sql 2005 安装失败 网上的方法记录: 安装中无法启动需要先用sp4的补丁文件sqlos.dll,sqlservr.exe 替换D:\Program Files (x ...
- silverlight——获取控件相对位置
事出有因:页面中存在滚动条,然后点击页面按钮时会进行正确性检查,如果出错在控件的位置会出现提示信息,但由于滚动条的出现,有可能在非可视区域内的控件出了问题,但目前是看不见的,因此,考虑获得出问题控件的 ...
- NOI2001 食物链【扩展域并查集】*
NOI2001 食物链 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的 ...
- 20179223《Linux内核原理与分析》第八周学习笔记
视频学习 可执行文件是怎么得来的? .c汇编成汇编代码.asm,然后再汇编成目标码.o.然后在连接成可执行文件,然后加载到内存可执行了. 对hello.c文件预处理(cpp),预处理负责把includ ...
- Excel VBA to Interact with Other Applications
转载自:https://analysistabs.com/excel-vba/interact-with-other-applications/ Interact with PowerPoint fr ...
- DependencyProperty.UnsetValue 的正确打开方式
无论是 WPF,还是 UWP,只要你用了绑定或者标记扩展,一定会碰到一个神奇的值——DependencyProperty.UnsetValue.UnsetValue 是什么意思?为什么会出现这个值呢? ...
- LOJ#3054. 「HNOI 2019」鱼
LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...
- psoc做dds
今天用psoc做了dds,现在总结一下. 1dds用到的相位累加器是用verilog写的,本来准备用一下datapath,这是和fpga不一样的一点,用了类似alu的结构,但是看手册后发现,虽然可以执 ...