NavigationView标题与内容子

时间:2016-09-20 12:53:03

标签: android android-layout navigation-drawer android-navigationview

我有一个DrawerLayout,其中第二个孩子是NavigationView,其中包含NavigationDrawer的内容。

当我启动项目时,打开抽屉,NavigationView内容与NavigationView的标题视图集重叠。

活动建立如下:

<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>

在活动中,我以编程方式设置标题视图。我必须这样做,因为导航的标题和正文将在应用程序生命周期中发生变化。

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

NavigationView子项的内容以相同的方式添加,在addView(View)对象上调用RelativeLayout

解决方法:为了绕过该问题,我在资源(@dimen/header_view_height)中设置了一个值,我用它来给出我的标题视图的高度,并作为NavigationView子项内容的marginTop。

我正在考虑的另一个解决方法是创建一个独立的视图,并像标题视图一样使用它。在这种情况下,RelativeLayout(NavView的子节点)将有两个子节点,第一个将是标题,第二个将是内容。

我知道NavigationView的工作方式与FrameLayout类似,但是有一种方法可以使用自定义视图在LinearLayout中对内容进行基本上的放样吗?

1 个答案:

答案 0 :(得分:0)

不要将ViewGroup放在NavigationView内并夸大标题,请尝试以下操作:

<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"/>

然后,您可以在drawer_header.xml布局文件中定义标题。