Android隐藏NavigationView标头

时间:2016-05-02 09:34:45

标签: android material-design

我正在使用Android应用,它需要 ToolBar 下方的 DrawerLayout 。我已经实现了这一点,但即使在删除标题后,NavigationView的标题即Status Bar 24dp也可见。 有没有办法删除它?

Problem

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

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

    <android.support.v4.widget.DrawerLayout
        android:layout_marginTop="?android:attr/actionBarSize"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       >

        <android.support.design.widget.NavigationView
            android:paddingBottom="0dp"
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@null"
            app:menu="@menu/activity_home_drawer"/>

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

5 个答案:

答案 0 :(得分:1)

从导航视图中删除app:headerLayout="@null"

像这样从onCreate()中膨胀你的headerlayout,然后设置visiblity。

 View headerView= LayoutInflater.from(this).inflate(R.layout.drawer_header, null);
 navigationView.addHeaderView(headerView);
 navigationView.getHeaderView(0).setVisibility(View.GONE);

答案 1 :(得分:1)

试试这个:

View headerView = navigationView.inflateHeaderView(R.layout.nav_header_home);

headerView.setVisibility(View.GONE);

并从xml中删除行app:headerLayout =“@ null”。

答案 2 :(得分:1)

也尝试这样,

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

<!-- Framelayout to display Fragments -->
<FrameLayout
    android:id="@+id/frame_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<!-- Listview to display slider menu -->
<ListView
    android:id="@+id/list_slidermenu"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@color/list_divider"
    android:dividerHeight="1dp"       
    android:background="@color/list_background"/>

答案 3 :(得分:1)

可能因为身高不够。为什么不将wrap_contentlayout="@layout/app_bar_home"一起使用,并将android:layout_below添加到DrawerLayout
或者为了简单起见,在这种情况下您也可以使用LinearLayout。这会更容易:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    >

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

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       >

        <android.support.design.widget.NavigationView
            android:paddingBottom="0dp"
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@null"
            app:menu="@menu/activity_home_drawer"/>

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

答案 4 :(得分:0)

在菜单中定义组,然后使用以下方法隐藏组:

navigationView.getMenu().setGroupVisible(groupPosition, false);

此外,请移除 headerLayout attribue。