0

J'ai un DrawerLayout avec NavigationView comme indiqué ci-dessousGonflage une vue personnalisée ci-dessous vue d'en-tête Navigation voir android

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_dynamic_screen" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start"> 

     <include layout="@layout/navigation_drawer_content"/> 

    </android.support.design.widget.NavigationView> 

</android.support.v4.widget.DrawerLayout> 

Dans NavigationView, vue d'en-tête est dynamiquement gonflé comme indiqué ci-dessous. Une autre disposition est incluse dans le NavigationView qui contient un ExpandableListView. J'ai besoin de placer cette mise en page juste en dessous du headerView gonflé. J'ai réalisé cela en obtenant dynamiquement la hauteur de headerView et en définissant la même chose que la propriété "marginTop" à la disposition incluse. Mais cela échoue (les deux vues se chevauchent) si headerView n'a pas de hauteur statique (si wrap_content). Comment puis-je définir la disposition incluse juste en dessous de headerView dans NavigationView d'une manière efficace. S'il vous plaît aider.

+0

double possible de [par défaut Voir le panneau de navigation à ExpandableListView] (https://stackoverflow.com/questions/38765790/default-navigation-drawer-view-to-expandablelistview) – random

+1

Merci pour le lien. C'est ce que j'ai fait. Mais mon exigence était d'obtenir dynamiquement la hauteur de la vue d'en-tête de la mise en page avec la hauteur wrap_content. J'ai atteint cela en utilisant la méthode onWindowFocusChanged –

Répondre

1

La réponse est aussi simple que cela. Prenez simplement la hauteur de la vue d'en-tête dynamique (avec height wrap_content) en utilisant la méthode onWindowFocusChanged et définissez-la comme l'attribut margin_top de la disposition incluse dans NavigationView.

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 
     if (navigationView.getHeaderView(0) != null) { 
      int headerHeight = navigationView.getHeaderView(0).getHeight(); 
      RelativeLayout navigationParentView = (RelativeLayout) findViewById(R.id.navigation_parent_view); 
      FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
        ViewGroup.LayoutParams.MATCH_PARENT); 
      params.setMargins(0,headerHeight,0,0); 
      navigationParentView.setLayoutParams(params); 
     } 
    }