解决android datepicker timepicker 同行显示问题(适配全屏)

本文介绍了一种方法,用于调整Android中DatePicker和TimePicker组件的布局,使其更紧凑并适应不同屏幕尺寸。通过修改NumberPicker的宽度比例,实现更灵活的适配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

最近在写项目时用到datepicker  timepicker放置在同一行组合,测试时遇到适配问题。然后百度才发现 datepicker 和timepicker本来都是很大的东西,放置在同一行效果不是很好。百度查阅好多虽然有解决方法  不过太死板,设置的单位是基于 px。


基本方法还是按照获取timepicker和datepicker中的numberPicker来设置具体参数

/**
 * 调整FrameLayout大小
 *
 * @param tp
 */
public static void resizePikcer(FrameLayout tp) {
    float[] size = null;
    //npList size==3 代表 datepicker 年月日宽度对应为 0.25f 0.2f 0.2f
    //npList size==2 代表 timepicker 时分宽度对应为 0.175f 0.175f
    List npList = findNumberPicker(tp);
    if (npList.size() == 3) {
        size = new float[]{0.25f, 0.2f, 0.2f};
    } else if (npList.size() == 2) {
        size = new float[]{0.175f, 0.175f};

    }
    for (int i = 0; i < npList.size(); i++) {
        NumberPicker np = npList.get(i);
        resizeNumberPicker(np, size[i]);
    }
}

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

/**
 * 调整numberpicker大小
 * @param np
 * @param size 每个numberPicker对应分得屏幕宽度
 */
private static void resizeNumberPicker(NumberPicker np, float size) {
    int dp5 = dipToPixel(np.getContext(), 5);
    //timepicker 时 分 左右各自有8dp空白
    int dp32 = dipToPixel(np.getContext(), 32);
    //屏幕宽度 - timepicker左右空白 -自设周边5dp空白
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((getScreenWidth(np.getContext()) - dp32 - dp5 * 10) *size), ViewGroup.LayoutParams.WRAP_CONTENT);
    params.setMargins(dp5, 0, dp5, 0);
    np.setLayoutParams(params);
}


getScreenWidth为获取屏幕宽度

因为我是在工具类中写的方法所以调用方式直接为
UtilMethod.resizePikcer(datePicker);
UtilMethod.resizePikcer(timePicker);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值