TimePicker+DatePicker

时间选择器与日期选择器

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

效果如图
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值