前言
最近在写项目时用到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); }
/**
* 调整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);