0

ich eine DrawerLayout mit NavigationView haben, wie unteneine benutzerdefinierte Ansicht unten Header Ansicht in Navigation Inflating ansehen 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> 

In NavigationView, eine Header-Ansicht dynamisch aufgeblasen gezeigt wird, wie unten gezeigt.

View headerView = getCustomHeaderView(navigationView); 
     if (headerView != null) { 
      navigationView.addHeaderView(headerView); 
     } 

Ein anderes Layout ist in der NavigationView enthalten, die eine ExpandableListView enthält. Ich muss dieses Layout direkt unterhalb der aufgeblähten HeaderView platzieren. Ich habe dies erreicht, indem ich dynamisch die Höhe von headerView ermittelte und die selbe Eigenschaft wie "marginTop" auf das inkludierte Layout setzte. Dies schlägt jedoch fehl (beide Ansichten überlappen sich), wenn die headerView keine statische Höhe hat (if wrap_content). Wie kann ich das inkludierte Layout unter der headView in NavigationView effektiv einstellen? Bitte helfen Sie.

+0

Mögliche Duplikat [Standardnavigationsleiste Ansicht auf ExpandableListView] (https://stackoverflow.com/questions/38765790/default-navigation-drawer-view-to-expandablelistview) – random

+1

Danke für den Link. Das ist, was ich tat. Aber meine Anforderung war, die Höhe der Header-Ansicht des Layouts mit der Höhe wrap_content dynamisch zu erhalten. Das habe ich mit der onWindowFocusChanged-Methode erreicht –

Antwort

1

Die Antwort ist so einfach. Ermitteln Sie die Höhe der dynamischen Header-Ansicht (mit height wrap_content) mithilfe der Methode onWindowFocusChanged und legen Sie sie als margin_top-Attribut für das enthaltene Layout in NavigationView fest.

@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); 
     } 
    } 
Verwandte Themen