Changer l’espace entre le groupe d’en-têtes et le premier menu

J’ai besoin de changer l’espace entre le groupe d’en-tête et le premier menu, voici un exemple:

entrez la description de l'image ici

J’ai vu beaucoup d’exemples et de publications, mais seul peut modifier l’espace pour tous les éléments.

Une idée?

RecyclerView 4 types d’éléments RecyclerView par 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; } 

Celui qui vous intéresse est SubheaderViewHolder . R.layout.design_navigation_item_subheader est la mise en page, qui serait gonflée pour ce ViewHolder .

  

Comme vous pouvez le constater, la hauteur provient de l’atsortingbut listPreferredItemHeightSmall du thème. Mais vous ne pouvez pas répondre à vos besoins en modifiant simplement la valeur de listPreferredItemHeightSmall , car l’ NormalViewHolder de NormalViewHolder dépend également de cette valeur. Par conséquent, sa modification affectera également tous les autres éléments.

Le moyen sournois et peu fiable d’y parvenir serait d’acquérir ce RecyclerView au moment de l’exécution avec l’API getIdentifier() . L’identifiant de RecyclerView personnalisé est design_navigation_view . Une fois acquise, vous pouvez obtenir manuellement la View réelle auprès de RecyclerView (savoir quel enfant de RecyclerView est celui dont vous avez besoin). Ensuite, vous pouvez modifier manuellement la hauteur de cette View . Mais ce n’est pas fiable, car:

  • Cela ne sera pas facile à gérer pour de nombreux articles de ce type, car vous ne pouvez pas savoir combien d’entre eux sont réellement affichés (enfin, vous le pouvez, mais est-ce que cela en vaut la peine?)

  • Vous devez écouter les événements de défilement et détecter quand un nouveau SubheaderViewHolder est affiché, puis appliquer votre hauteur personnalisée.

Je ne trouve pas assez de coutures pour modifier la hauteur de cet article. Votre meilleure option serait de fournir votre mise en page personnalisée en tant que contenu de NavigationView .

Grâce à azizbekian , sa réponse m’a donné une excellente idée (peut-être pas la meilleure mais dans mon cas, plus simple et rapide à mettre en œuvre). Fondamentalement, j’ajoute une mise en page avec le même nom (cela la remplacera). Après cela, je change tout ce dont j’ai besoin. Le résultat est le suivant:

entrez la description de l'image ici

entrez la description de l'image ici

D’après mon expérience, la meilleure façon de gérer un tiroir de navigation consiste à lui afficher un Fragment complet. Cela vous permet d’avoir un contrôle total sur sa disposition et son comportement.

Changer les valeurs dans dimen.xml en dimen.xml les valeurs déjà définies dans la bibliothèque de support Android.

  0dp 0dp 0dp