2013-10-02 4 views
2

Est-il possible de faire l'Holo DatePicker & TimePicker plus petits ou réduire padding/marges? J'ai du mal à obtenir des éléments à l'écran lorsque j'utilise Theme.Holo.Light.Dialog comme style. Si j'utilise Theme.Dialog comme style, tout va bien.Comment réduire le rembourrage/les marges du Holo DatePicker & TimePicker?

C'est la boîte de dialogue tel qu'il apparaît sur le HTC One V (s'il vous plaît excuser l'image du téléphone, je ne pouvais pas pour enregistrer des captures d'écran):

enter image description here

Vous pouvez voir que le les boutons sont coupés en bas. Si le DatePicker & TimePicker ne prenait pas autant d'espace, tout irait bien.

C'est la boîte de dialogue tel qu'il apparaît sur le Galaxy S4 (pour référence):

enter image description here

Et voici comment le Theme.Dialog apparaît sur le HTC (vous pouvez voir qu'il n'y a pas d'espace gaspillée) :

enter image description here

Répondre

2

le problème vient sûrement de la taille de l'écran et Holo définit une seule mise en page avec des marges brutes (en DP).

passer outre le fichier XML de mise en page here en l'important dans les ressources de votre projet. Assurez-vous de sauvegarder le fichier dans le dossier correspondant à la taille de l'écran de votre téléphone.

Ensuite, vous serez heureux de modifier les propriétés de mise en page tels que des marges.

1

Pour l'Holo TimePicker vous pouvez utiliser.

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); 
     } 
    } 
} 

Les unités sont des pixels alors assurez-vous de convertir à partir de dp. Ne pas utiliser des hauteurs inférieures à 120dp.

maintien de la hauteur et la suppression des marges verticales devraient normalement être suffisantes:

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

Bien que je ne l'ai pas testé, il devrait être le même pour DatePicker en utilisant la réflexion sur les champs mDaySpinner, mMonthSpinner et mYearSpinner à la place.

+0

Works pour moi +1 – mmirwaldt

3

solution la plus simple ce que j'ai trouvé: fixant la marge négative à pickerView date/heure.

<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"/> 
Questions connexes