您的位置:首页 > 其它

TimePicker+DatePicker

2016-06-30 17:33 162 查看

时间选择器与日期选择器

如果主题为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;
}


效果如图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: