时间选择器与日期选择器
如果主题为android自带主题(lv13以下)会变为旧版本的样式
解决办法(变为新版):主题改为holo的,相应的改一下minsdkversion即可,在配置文件中。
如果想让时间和日期的同一列显示,可能撑不下,解决办法如下:
先来个自己发现的简单的:压缩一下,即scalex和scaley,如果不想显示年或者日;可以利用marginleft解决。
改变layout解决:这俩控件都是numberpicker组成的,所以可以利用这点改变numberpicker的layoutparamers,代码如下:
// Change DatePicker layout
LinearLayout dpContainer = (LinearLayout)datePicker.getChildAt(0) ; // LinearLayout
LinearLayout dpSpinner = (LinearLayout)dpContainer.getChildAt(0); // 0 : LinearLayout; 1 : CalendarView
for(int i = 0; i < dpSpinner.getChildCount(); i ++) {
NumberPicker numPicker = (NumberPicker)dpSpinner.getChildAt(i); // 0-2 : NumberPicker
LayoutParams params1 = new LayoutParams(120, LayoutParams.WRAP_CONTENT);
params1.leftMargin = 0;
params1.rightMargin = 30;
numPicker.setLayoutParams(params1);
// EditText cusET = (EditText)numPicker.getChildAt(0); // CustomEditText
// cusET.setTextSize(14);
// cusET.setWidth(70);
}
// Change TimePicker layout
LinearLayout tpContainer = (LinearLayout)timePicker.getChildAt(0) ; // LinearLayout
LinearLayout tpSpinner = (LinearLayout)tpContainer.getChildAt(0); // 0 : LinearLayout; 1 : CalendarView
for(int i = 0; i < tpSpinner.getChildCount(); i ++) {
// child(1) is a TextView ( : )
if (i == 1) {
continue;
}
NumberPicker numPicker = (NumberPicker)tpSpinner.getChildAt(i); // 0 : NumberPicker; 1 : TextView; 2 : NumberPicker
LayoutParams params3 = new LayoutParams(100, LayoutParams.WRAP_CONTENT);
params3.leftMargin = 0;
params3.rightMargin = 30;
numPicker.setLayoutParams(params3);
// EditText cusET = (EditText)numPicker.getChildAt(0); // CustomEditText
// cusET.setTextSize(14);
// cusET.setWidth(70);
}
感觉挺好的,但是发现datepicker完美,而timepicker会报转换错误异常,接下来有了第二种方法:
List<NumberPicker> nbPicker= findNumberPicker(timePicker);
for (NumberPicker np : nbPicker)
{
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(120, LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, 0, 0) ;
np.setLayoutParams(params);
}
List<NumberPicker> nbPicker2= findNumberPicker(datePicker);
for (NumberPicker np : nbPicker2)
{
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(140, LayoutParams.WRAP_CONTENT);
params.setMargins(10, 0, 10, 0) ;
np.setLayoutParams(params);
}
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;
}
效果如图