我有一个非常标准的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"/>
但我希望有一个动态标题,所以我可以在用户登录等时更改它...所以我尝试使用片段而不是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中使用片段,这样我就可以处理片段的java文件中的所有逻辑。或者解决这个问题的正确解决办法是什么。
答案 0 :(得分: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
。
答案 1 :(得分:11)
您可以像这样调用在xml上声明的标头:
NavigationView navigationView= (NavigationView) findViewById (R.id.navigationView);
View header = navigationView.getHeaderView(0);
然后得到这样的观点:
TextView text = (TextView) header.findViewById(R.id.text);