1

DrawerLayoutの2番目の子はNavigationViewで、その内容はNavigationDrawerです。NavigationViewヘッダーが内容子と重複しています

NavigationViewに設定されているヘッダービューと重複している内容のNavigationViewが、プロジェクトを起動して引き出しを開いたときに表示されます。 activtiyは、以下のように構築され

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/drawer_main_layout"> 

    <android.support.design.widget.CoordinatorLayout> 
     <!-- contents of activity--> 
    </android.support.design.widget.CoordinatorLayout> 

    <!-- nav drawer --> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view_drawer" 
     android:orientation="vertical" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start"> 

     <RelativeLayout 
      android:id="@+id/drawer_body" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="@dimen/navigation_drawer_header_height" 
      ></RelativeLayout> 
    </android.support.design.widget.NavigationView> 

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

のアクティビティで、私は、プログラムヘッダビューを設定します。アプリケーションのライフサイクル中にnavのヘッダーと本文が変更されるため、これを行う必要があります。

LayoutInflater inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     RelativeLayout headerView = new RelativeLayout(this); 
     View mHeadernav = inflator.inflate(resourceViewId,headerView); 
     mNavigationView.addHeaderView(mHeadernav); 

NavigationView子のコンテンツはRelativeLayoutオブジェクトにaddView(View)を呼び出して、同じように追加されます。

回避方法:この問題を回避するには、リソース(@dimen/header_view_height)に値を設定し、私はヘッダービューの高さと、NavigationViewという内容のmarginTopを使用します。

私が考えていた別の回避策は、スタンドアロンのビューを作成し、ヘッダービューのように使用することです。この場合、RelativeLayout(NavViewの子)には2つの子があり、最初はヘッダー、2番目はコンテンツになります。

私は、FrameLayoutのように動作することを知っていますが、カスタムビューを使用してLinearLayoutのように連続してコンテンツを作成する方法がありますか?そして、あなたはdrawer_header.xmlレイアウトファイルであなたのヘッダーを定義することができ

<android.support.design.widget.NavigationView 
    android:id="@+id/navigation_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="@color/background_color" 
    app:headerLayout="@layout/drawer_header" 
    app:menu="@menu/menu_drawer_items"/> 

:代わりにあなたのNavigationViewの内側ViewGroupを入れて、ヘッダを膨らませるの

+0

スクリーンショット –

+0

あなたの引き出しに縦型の「LinearLayout」を使用しただけで構いませんか?あなたが 'LinearLayout'で簡単に複製できなかったものに対して' NavigationView'を使っているようではありません。 –

答えて

0

は、これを試してみてください。

+0

私はこれを行うことはできません。私はボディとヘッダーを読み込む必要があります私はすべての活動でそれを変更する必要がありますbeacuse – MikeKeepsOnShine

関連する問題