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
を入れて、ヘッダを膨らませるの
スクリーンショット –
あなたの引き出しに縦型の「LinearLayout」を使用しただけで構いませんか?あなたが 'LinearLayout'で簡単に複製できなかったものに対して' NavigationView'を使っているようではありません。 –