NavigationView 如何处理动态 header 内容
NavigationView how to handle dynamic header content
我有一个非常标准的 NavigationView。当我像下面这样在 header 中使用静态布局时,它工作得很好。
<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"/>
但我想要一个动态的 header 这样我就可以在用户登录时更改它等等...所以我尝试使用片段而不是 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"/>
我能否在 header 布局中使用片段,以便我可以在片段的 java 文件中处理我的所有逻辑。或者什么是处理这个问题的正确解决方案。
您可以在代码中通过扩展自定义布局并将其设置为 header 用于导航视图。
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
。
您可以这样调用在 xml 上声明的 header:
NavigationView navigationView= (NavigationView) findViewById (R.id.navigationView);
View header = navigationView.getHeaderView(0);
然后得到这样的观点:
TextView text = (TextView) header.findViewById(R.id.text);
我有一个非常标准的 NavigationView。当我像下面这样在 header 中使用静态布局时,它工作得很好。
<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"/>
但我想要一个动态的 header 这样我就可以在用户登录时更改它等等...所以我尝试使用片段而不是 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"/>
我能否在 header 布局中使用片段,以便我可以在片段的 java 文件中处理我的所有逻辑。或者什么是处理这个问题的正确解决方案。
您可以在代码中通过扩展自定义布局并将其设置为 header 用于导航视图。
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
。
您可以这样调用在 xml 上声明的 header:
NavigationView navigationView= (NavigationView) findViewById (R.id.navigationView);
View header = navigationView.getHeaderView(0);
然后得到这样的观点:
TextView text = (TextView) header.findViewById(R.id.text);