调整TimePicker, DatePicker的大小,样式
来源:互联网 发布:知世超级超级超级犀利 编辑:程序博客网 时间:2024/05/22 06:04
原文地址: http://www.ziliao1.com/Article/Show/1ADD173F9F715CF18F8A04A328CF204B.html
最近在做一个时间选择器,想把要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的大小,样式
- Android调整TimePicker和DatePicker大小
- Android调整TimePicker和DatePicker大小
- Android TimePicker和DatePicker并列显示调整大小
- 更改TimePicker、DatePicker的Spinner样式默认分隔线颜色
- DatePicker,TimePicker的使用方法
- Android开发:TimePicker调整成Holo的样式
- DatePicker 和 TimePicker的使用
- AlarManager、DatePicker、TimePicker 的应用
- DatePicker及TimePicker的使用
- DatePicker和TimePicker的使用
- DatePicker与TimePicker的使用
- spinner,timepicker,datePicker的用法
- android 解决datepicker和timepicker一起用引起的布局样式问题
- 解决android timePicker 和 datePicker因系统版本差异而引起的样式改变
- DatePicker/TimePicker
- DatePicker、TimePicker
- DatePicker,TimePicker
- Android中VelocityTracker的简介
- Android app 的提醒功能
- UI04 实现计算器功能
- sendmsg在传输层的实现(一)
- B/S And C/S
- 调整TimePicker, DatePicker的大小,样式
- iOS里NSMutableArray 存取 CLLocationCoordinate2D
- hdu 4791 二分
- jQuery中止未完成的Ajax请求
- 字典树-HDOJ-1671
- 栈的基本操作( too simple)
- C++构造及析构函数调用问题
- 深拷贝和浅拷贝
- mysql建表、索引以及SQL性能优化