最近写了个app,里面要将DatePicker和TimePicker并列显示。但是,Android内部把DatePicker和 TimePicker大小固定了,导致4.5寸手机屏幕一行只能显示出一个,另一个不能完全显示。在网上搜了一下,没有什么好的解决方案,看到了别人写的 一个自定义控件,研究了下,发现了一个方法来调整两个组件的大小。

没有调整之前效果如图:可以看到TimePicker只有很小一部分显示出来了

由于TimePicker和DatePicker里面的每一个选择框都是一个NumberPicker,而NumberPicker是可以改变LayoutParams的,所以可以有如下调整思路:

1.改变DatePicker和TimePicker里面字体的大小,目的是让DatePicker和TimePicker缩小了以后字能够完全显示出来。

2.得到DatePicker和TimePicker里面的NumberPicker

3.改变取得的NumberPicker的宽度,就大功告成了

1.改变字体大小

改变字体大小有几种方法,为了统一,我是用的主题资源来改变字体大小的,代码如下:

    <style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:textSize">10sp</item>
</style>

2.得到DatePicker和TimePicker里面的NumberPicker

由于DatePicker和TimePicker都继承了FrameLayout类,所以函数可以定义为:

                /**
* 调整FrameLayout大小
* @param tp
*/
private void resizePikcer(FrameLayout tp){
List<NumberPicker> npList = findNumberPicker(tp);
for(NumberPicker np:npList){
resizeNumberPicker(np);
}
}

这个函数很简单,参数是FrameLayout,调用时传入其子类即可。该函数调用了我自定义的findNumberPicker函数找到tp里面所有的NumberPicker,然后用自定义的resizeNumberPicker调整大小。

其中:findNumberPicker定义如下:

		/**
* 得到viewGroup里面的numberpicker组件
* @param viewGroup
* @return
*/
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;
}

这个函数是遍历viewGroup的子元素,如果是NumberPicker则加入集合中。如果是一个LinearLayout布局,递归调用该函数,找布局里面的NumberPicker.

resizeNumberPicker定义如下:

		/*
* 调整numberpicker大小
*/
private void resizeNumberPicker(NumberPicker np){
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(50, LayoutParams.WRAP_CONTENT);
params.setMargins(10, 0, 10, 0);
np.setLayoutParams(params);
}

该函数完成调整功能,也很简单,new一个布局参数,然后设置宽度为50,高度为wrap_content,再通过setMargins设置边距,把NumberPicker的布局参数设置为该值。

准备完这些后,就可以调用了,调用也很简单,就是得到DatePicker和TimePicker对象,然后用resizePicker(DatePicker)和resizePicker(TimePicker)即可。

下面贴出我的调用代码:

			DatePicker datePicker = (DatePicker)rootView.findViewById(R.id.date);//日期选择框
TimePicker timePicker = (TimePicker)rootView.findViewById(R.id.time);//时间选择框
resizePikcer(datePicker);//调整datepicker大小
resizePikcer(timePicker);//调整timepicker大小

大功告成,所有步骤完成后,DatePicker和TimePicker就可以并列显示了,我的显示结果如下图:

Android调整TimePicker和DatePicker大小的更多相关文章

  1. android中TimePicker和DatePicker的简单使用

    package com.example.demo10; import java.util.Calendar; import android.support.v7.app.ActionBarActivi ...

  2. Android 调整图标和字体大小

    1. Root 2. 进system,找到build.prop 3. 用RE管理器,编辑 ro.sf.lcd_density=320, 后面的数值随意调整,越大图标越大,不要太贪心,图标变大会显示不全 ...

  3. Android 自学之日期DatePicker、时间TimePicker选择器

    日期(DatePicker).时间(TimePicker)是两个比较易用的控件,他们都是从帧布局FrameLayout派生而出的:他们在FrameLayout的基础上提供了一些方法来获取当前用户所选择 ...

  4. 9.Android之日期对话框DatePicker控件学习

    设置日期对话框在手机经常用到,今天来学习下. 首先设置好布局文件:如图 xml对应代码 <?xml version="1.0" encoding="utf-8&qu ...

  5. android 日期控件 DatePicker

    DatePicker的缺陷 提供的API太少,没办法个性化定制.比如,不能指定某部分的颜色,不能控制显示的部分等. xml中提供的属性太少,同样影响定制化. 兼容性问题太多,在4.x,5.x和6.0+ ...

  6. Android之hint提示字体大小修改,显示完全

    Android之hint提示字体大小修改,显示完全 1.工作中遇到一个问题,就是自定义EditText的hint提示在超大字体下会显示不全, 2.然后在网上搜索了一下,在这里记录一下,分享给大家,在此 ...

  7. android自适应屏幕方向和大小

    一:不同的layout Android手机 屏幕 大小不一,有480x320, 640x360, 800x480.怎样才能让App自动 适应不同的屏幕 呢?      其实很简单,只需要在res目录下 ...

  8. 调整 Windows VM 的大小

    本文说明如何使用 Azure Powershell 调整在 Resource Manager 部署模型中创建的 Windows VM 的大小. 创建虚拟机 (VM) 后,可以通过更改 VM 大小来扩展 ...

  9. Android代码中设置字体大小,字体颜色,显示两种颜色.倒计时效果

    Android代码中设置字体大小,字体颜色,显示两种颜色 在xml文件中字体大小用的像素 <TextView android:id="@+id/uppaid_time" an ...

随机推荐

  1. [ACM] POJ 3273 Monthly Expense (二分解决最小化最大值)

    Monthly Expense Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14158   Accepted: 5697 ...

  2. 使用LINQ的几个小技巧

    这里总结了这些技巧.介绍如何使用LINQ来: 初始化数组 在一个循环中遍历多个数组 生成随机序列 生成字符串 转换序列或集合 把值转换为长度为1的序列 遍历序列的所有子集 如果你在LINQ方面有心得也 ...

  3. 【转】CTE(公用表表达式)

    本文转自:爽朗的微笑  http://www.cnblogs.com/shuangnet/archive/2013/03/22/2975929.html 公用表表达式 (CTE) 具有一个重要的优点, ...

  4. 经典排序算法及python实现

    今天我们来谈谈几种经典排序算法,然后用python来实现,最后通过数据来比较几个算法时间 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据 ...

  5. 【转】Tomcat7.0.42源代码运行环境搭建

    转自:http://tyrion.iteye.com/blog/1903608 以前看过Tomcat5的一部分源代码,当时只看了个大概的启动分析,后来看了<How Tomcat Works> ...

  6. python中的迭代

    #迭代Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上. #list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标 ...

  7. 写一个背景渐变的TextView输入框

    1:在res文件夹下新建一个drawble文件夹,并新建一个背景文件如writebg.xml <?xml version="1.0" encoding="utf-8 ...

  8. php实现分页,上一页下一页

    首先学东西  要多看手册用php自带的函数  可以解决一些难解的问题 <?php /**  * Created by JetBrains PhpStorm.  * User: Administr ...

  9. poj 1430 第二类斯特林数

    1 #include <iostream> #include <cmath> #include <algorithm> using namespace std; i ...

  10. NET Core,跨平台的轻量级RPC

    NET Core,跨平台的轻量级RPC:Rabbit.Rpc 特性一览 Apache License 2.0协议开源 支持客户端负载均衡(提供了轮询.随机算法的实现) 支持ZooKeeper和文件共享 ...