標籤:android style class blog code java
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 屬性來達到任意修改這兩種控制項大小的目的。