Cambiar la separación entre el grupo de encabezados y el primer elemento

Necesito cambiar el espacio entre el grupo de encabezados y el primer elemento del menú, he aquí un ejemplo:

Introduzca aquí la descripción de la imagen

He visto un montón de ejemplos y mensajes, pero sólo se puede cambiar el espacio para todos los elementos, y sólo tengo que cambiar sólo para el grupo de cabecera .

¿Alguna idea?

4 Solutions collect form web for “Cambiar la separación entre el grupo de encabezados y el primer elemento”

Hay 4 tipos de elementos en el RecyclerView que crea NavigationView :

@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case VIEW_TYPE_NORMAL: return new NormalViewHolder(mLayoutInflater, parent, mOnClickListener); case VIEW_TYPE_SUBHEADER: return new SubheaderViewHolder(mLayoutInflater, parent); case VIEW_TYPE_SEPARATOR: return new SeparatorViewHolder(mLayoutInflater, parent); case VIEW_TYPE_HEADER: return new HeaderViewHolder(mHeaderLayout); } return null; }
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case VIEW_TYPE_NORMAL: return new NormalViewHolder(mLayoutInflater, parent, mOnClickListener); case VIEW_TYPE_SUBHEADER: return new SubheaderViewHolder(mLayoutInflater, parent); case VIEW_TYPE_SEPARATOR: return new SeparatorViewHolder(mLayoutInflater, parent); case VIEW_TYPE_HEADER: return new HeaderViewHolder(mHeaderLayout); } return null; } 

El que le interesa es SubheaderViewHolder . R.layout.design_navigation_item_subheader es el diseño, que estaría inflado para ese ViewHolder .

 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="?attr/listPreferredItemHeightSmall" android:gravity="center_vertical|start" android:maxLines="1" android:paddingLeft="?attr/listPreferredItemPaddingLeft" android:paddingRight="?attr/listPreferredItemPaddingRight" android:textAppearance="@style/TextAppearance.AppCompat.Body2" android:textColor="?android:textColorSecondary"/> 

Como se puede ver, la altura se toma del atributo listPreferredItemHeightSmall del tema. Pero usted no puede alcanzar su requisito simplemente cambiando el valor de listPreferredItemHeightSmall , porque el elemento de NormalViewHolder también depende de ese valor, cambiando así afectaría a todos los demás elementos también.

La manera disimulada y no fiable de lograr eso sería adquirir este RecyclerView en tiempo de ejecución con API getIdentifier() . El id del RecyclerView personalizado es design_navigation_view . Una vez adquirido, puede obtener manualmente la View real de RecyclerView (saber qué hijo de RecyclerView es el que necesita). A continuación, puede cambiar manualmente la altura de esa View . Pero eso no es confiable, porque:

  • No será fácil manejar eso para muchos de estos artículos, porque no se puede saber cuántos de ellos se muestran realmente (bueno, se puede, pero vale la pena?)

  • Tienes que escuchar los eventos de desplazamiento y detectar cuándo se está mostrando un nuevo SubheaderViewHolder – y aplicar tu altura personalizada.

No puedo encontrar suficientes costuras para afectar la altura de ese elemento. Su mejor opción sería proporcionar su diseño personalizado como el contenido de NavigationView .

En mi experiencia, la mejor manera de manejar el cajón de nav es tener que mostrar un Fragment completo. Esto le permite tener un control total de su diseño y comportamiento.

Gracias a azizbekian , su respuesta me dio una gran idea (quizás no la mejor pero en mi caso más simple y rápida de implementar). Básicamente, agrego un diseño con el mismo nombre (esto lo anulará). Después de eso cambio todo lo que necesito, por lo que el resultado es el siguiente:

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen

Cambiar los valores en dimen.xml anulando los valores que ya están establecidos en la biblioteca de soporte de android.

  <dimen name="design_navigation_padding_top_default" tools:override="true">0dp</dimen> <dimen name="design_navigation_separator_vertical_padding"tools:override="true">0dp</dimen> <dimen name="design_navigation_padding_bottom"tools:override="true">0dp</dimen> 
  • NavigationView onClick de xml provoca errores
  • NavigationView selecciona el elemento seleccionado como
  • NavigationView obtener / buscar el diseño del encabezado
  • Translúcido StatusBar con el color dinámico ActionBar en Android
  • ¿Cómo agregar valor de notificación para el elemento en NavigationView para el cajón de diseño de material?
  • Agregar hijo a un MenuItem dentro de un grupo en un NavigationView
  • DrawerLayout con NavigationView - no mostrar el efecto de rizo en el clic
  • Obtención de error al inflar la clase android.support.design.widget.NavigationView
  • Agregue un separador de sección para el Cajón de navegación en Android
  • NavigationView diapositiva desde la derecha
  • Cómo configurar el recuento de notificaciones no leídas en NavigationView de DrawerLayout?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.