【问题标题】:NavigationView how to handle dynamic header contentNavigationView如何处理动态标题内容
【发布时间】:2015-07-23 06:51:11
【问题描述】:

我有一个非常标准的 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 文件中处理我的所有逻辑。或者解决这个问题的正确方法是什么。

【问题讨论】:

  • 在这里查看我的答案...stackoverflow.com/a/30660069/3544839 ..这里我使用 TextView 作为根,而您可以使用任何视图组,一旦您获得视图组的对象,您就可以轻松自定义它..跨度>

标签: android android-fragments navigationview


【解决方案1】:

您可以在代码中通过扩展自定义布局并将其设置为导航视图的标题来实现。

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

【讨论】:

    【解决方案2】:

    您可以像这样调用在 xml 中声明的标头:

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

    然后得到这样的视图:

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

    【讨论】:

    • 当您在 xml 中设置 app:headerLayout 时,此方法有效
    猜你喜欢
    • 1970-01-01
    • 2017-11-15
    • 2010-12-18
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2019-01-23
    相关资源
    最近更新 更多