2013-10-02 122 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"/>