NavigationView如何处理动态标题内容

8

我有一个非常标准的NavigationView。当我在头部使用静态布局时,像下面这样,它完美地工作。

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header"
    app:menu="@menu/drawer_view"/>

但我希望有一个动态的页眉,这样当用户登录等情况发生时可以更改它...所以我尝试使用片段(fragment)而不是nav_header.xml

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/fragment_header"
    app:menu="@menu/drawer_view"/>

我能否在headerLayout中使用fragment,以便我可以将所有逻辑处理放在fragment的java文件中。或者有什么正确的解决方案来处理这个问题。


请查看我的答案,链接在这里:https://dev59.com/O10a5IYBdhLWcg3wLWGx#30660069 。在这里,我使用TextView作为根视图,但您可以使用任何ViewGroup。一旦您获取了ViewGroup的对象,就可以轻松地对其进行自定义。 - Moinkhan
2个回答

13
您可以通过膨胀自定义布局并为导航视图设置其标题来在代码中实现此操作。
NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
View nav_header = LayoutInflater.from(this).inflate(R.layout.nav_header, null);
((TextView) nav_header.findViewById(R.id.name)).setText("UserName");
navigationView.addHeaderView(nav_header);

您不需要在xml中设置app:headerLayout


12
你可以像这样调用在XML中声明的标题:

你可以像这样调用在XML中声明的标题:

NavigationView navigationView= (NavigationView) findViewById (R.id.navigationView);    
View header = navigationView.getHeaderView(0);

然后像这样获取视图:

TextView text = (TextView) header.findViewById(R.id.text);

当你在XML中设置了app:headerLayout时,这个功能就会起作用。 - W I Z A R D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接