调整TimePicker, DatePicker的大小,样式

原文地址:  http://www.ziliao1.com/Article/Show/1ADD173F9F715CF18F8A04A328CF204B.html


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

  

  

  首先看布局



    
    
       
        

  

  左边使用了一个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 findNumberPicker(ViewGroup viewGroup)
    {
        List npList = new ArrayList();
        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 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 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 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)



   

    

   


  然后在应用的 AndroidManifest.xml文件中的Activity下边增加属性 android:theme="@style/Theme.picker",表示该Acitivity使用该theme. 这样Picker就会显示你设置好的颜色。

    

            android:name="com.example.timewidget.TimeActivity"

            android:label="@string/app_name" 

            android:theme="@style/Theme.picker">

           

               


               

           

       

你可能感兴趣的:(调整TimePicker, DatePicker的大小,样式)