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


前言

最近在写项目时用到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);


你可能感兴趣的:(日常问题处理)