DatePicker 与 TimePicker 控件占用的空间是固定的,没有参数可以更改。
如果修改 length 和 width 属性,只会让控件被切割,显示将不完整。很多人说可以使用 scale 属性来放大或缩小
android:scaleX="0.8"
android:scaleY="0.8"
这种方法虽然会缩小控件,但控件还是没法显示全。
找到的一个不错的解决办法是,用 Java 反射机制获取控件相关属性,然后修改。代码如下:
Field[] fields = DatePicker.class.getDeclaredFields(); //get DatePicker fields View[] v_months = null; EditText [] v_edits; int size = fields.length; v_edits = new EditText [size]; v_months = new View [size]; for(int i=0;i<size;i++) { fields[i].setAccessible(true); if(fields[i].getType().getSimpleName().equals("NumberPicker")) { try { v_months[i] = (View)fields[i].get(datePicker1); /* change width of the line in the picker */ v_months[i].measure(0, 0); v_months[i].getLayoutParams().width = (int) (v_months[i].getMeasuredWidth() * 0.7f); } catch (Exception e) { Log.e(TAG, e.getMessage()); } } } for(int i=0;i<size;i++) { if(v_months[i] != null) { fields = v_months[i].getClass().getDeclaredFields(); for(Field field : fields) { field.setAccessible(true); if(field.getType().getName().equals(EditText.class.getName())) { try { v_edits[i] = (EditText) field.get(v_months[i]); /* change text size and color of the picker */ v_edits[i].setTextSize(5); v_edits[i].setTextColor(getResources().getColor(R.color.holo_blue)); } catch (Exception e) { Log.e(TAG, e.getMessage()); } } } } }
用这种方法,可以结合 scale 属性来达到任意修改这两种控件大小的目的。