2013-10-02 120 views
2

是否可以使Holo DatePicker & TimePicker更小或減少填充/邊距?當我使用Theme.Holo.Light.Dialog作爲樣式時,我無法使元素適合屏幕。如果我使用Theme.Dialog作爲它適合的風格。如何減少Holo DatePicker&TimePicker的填充/邊距?

這是對話框,它出現在的HTC One V(請原諒手機的知情同意,我不能讓它保存截圖):

enter image description here

你可以看到,按鈕被剪切在底部。如果DatePicker & TimePicker沒有佔用太多的空間,它將全部適合。

這是對話,因爲它出現在Galaxy S4(僅供參考):

enter image description here

這是Theme.Dialog如何出現在HTC(你可以看到,有沒有浪費的空間) :

enter image description here

回答

2

問題確實來自於屏幕的大小和全息只定義了一個與原利潤率佈局(在DP)。

通過將佈局XML文件here導入到項目資源中來覆蓋佈局XML文件here。確保將文件保存在與手機屏幕尺寸對應的文件夾中。

然後,您會很高興地更改佈局屬性,如邊距。

1

對於Holo TimePicker,您可以使用它。

public static void setTimePickerHeightTopBottomMargin(
     TimePicker timePicker, int height, int topMargin, int bottomMargin) { 

    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
     try { 
      Field f; 
      View v; 
      ViewGroup.MarginLayoutParams params; 
      // mHourSpinner 
      f = TimePicker.class.getDeclaredField("mHourSpinner"); 
      f.setAccessible(true); 
      v = (View) f.get(timePicker); 
      params = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); 
      params.height = height; 
      params.topMargin = topMargin; 
      params.bottomMargin = bottomMargin; 
      // mMinuteSpinner 
      f = TimePicker.class.getDeclaredField("mMinuteSpinner"); 
      f.setAccessible(true); 
      v = (View) f.get(timePicker); 
      params = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); 
      params.height = height; 
      params.topMargin = topMargin; 
      params.bottomMargin = bottomMargin; 
      // mAmPmSpinner 
      f = TimePicker.class.getDeclaredField("mAmPmSpinner"); 
      f.setAccessible(true); 
      v = (View) f.get(timePicker); 
      params = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); 
      params.height = height; 
      params.topMargin = topMargin; 
      params.bottomMargin = bottomMargin; 
     } catch (Exception e) { 
      Log.w(TAG, e); 
     } 
    } 
} 

單位是像素,所以一定要從dp轉換。不要使用小於120dp的高度。通過使用領域mDaySpinnermMonthSpinnermYearSpinner而不是反射

setTimePickerHeightTopBottomMargin(mTimePicker, 
     ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0); 

雖然我沒有測試它,它應該是的DatePicker相同:

保持高度和消除垂直利潤率一般應足夠。

+0

適合我+1 – mmirwaldt

3

最簡單的解決方案我發現是: 設置負邊距日期/時間pickerView。

<DatePicker 
     android:id="@+id/date" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:calendarViewShown="false" 
     android:datePickerMode="spinner" 
     android:layout_marginTop="-32dp" 
     android:layout_marginBottom="-32dp" 
     tools:ignore="UnusedAttribute"/>