【问题标题】:Is there any way to control views inside NavigationView header?有什么方法可以控制 NavigationView 标头中的视图吗?
【发布时间】:2015-07-06 09:02:25
【问题描述】:

正如标题所说,我想知道是否有任何方法可以控制 NavigationView 标头内的视图? (添加或删除标题除外。)

例如:在标题中,我有一个用户头像。默认情况下,它显示一个客人图像,但用户登录后,将显示真实的头像。

如何做到这一点?

【问题讨论】:

  • 这取决于你在标题视图中膨胀的内容。您可以将ImageView 放入LinearLayout 并动态更改ImageDrawable。
  • 参考我的这个答案 .. stackoverflow.com/a/30660069/3544839 ...
  • 因此您可以使用 NavigationView 的 inflateHeaderView(int resID)。这将为您提供 View 对象作为回报,以便您可以使用视图对象访问完整布局
  • 到目前为止,最好的答案是 Moikhan,stackoverflow.com/questions/30621047/…
  • 你可以在那里投票,兄弟...lolzzz

标签: android navigationview


【解决方案1】:

将您的支持库更新到 23.1.1 或更高版本后,

你可以这样做 -

View header = navigationView.getHeaderView(0);
TextView text = (TextView) header.findViewById(R.id.textView);

或者如果你有多个标题

navigationView.getHeaderCount()

参考:https://code.google.com/p/android/issues/detail?id=190226#c31

【讨论】:

    【解决方案2】:

    因为我不能接受评论作为答案。所以,我在这里重新发布 Moinkhan 的答案:

    首先创建像lay_header.xml这样的标头XML

    <TextView
        android:id="@+id/tvThought"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    

    在您的 java 文件中,在 TextView 中填充上面的标题。喜欢

    TextView headerView = (TextView) LayoutInflater.from(this).inflate(R.layout.lay_header, null);
    headerView.setText("Your_thoght");
    

    现在将其添加为 HeaderView

    navView = (NavigationView) findViewById(R.id.navView);
    navView.addHeaderView(headerView);
    

    就是这样……

    您也可以通过以下方式查看:Customising NavigationView - Adding dynamic headerView, Android Support Design Library

    非常感谢! 同样,我们需要一个允许用户接受评论作为答案的函数!

    【讨论】:

      【解决方案3】:

      另一种方法是使用 NavigationView 对象的方法“inflateHeaderView()”,如下所示(使用“setContentView()”后):

      View headerLayout = navigationView.inflateHeaderView(R.layout.yours_nav_header_layout);
      

      在此之后,您可以使用“headerLayout”访问标题布局中的自定义视图,如下所示:

      View cutomView = (TextView) headerLayout.findViewById(R.id.lay_sign_in);
      

      在我的例子中,我使用 ButterKnife 框架来注入 View “navigationView”,如下所示:

      @Bind(R.id.nav_view) NavigationView navigationView;
      
      @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              ButterKnife.bind(this);
          }
      

      【讨论】:

      • 这个方法没问题,只要标题没有在 navigationview 的 xml 中定义。如果是这样,调用 inflateheaderview 会在侧抽屉中添加一个额外的标题。
      【解决方案4】:

      只需尝试在您的活动中找到您的视图:

      tvUserName = (TextView) findViewById(R.id.tv_username);
      

      它对我有用。我的标题布局是:

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="192dp"
          android:background="?attr/colorPrimaryDark"
          android:padding="16dp"
          android:theme="@style/ThemeOverlay.AppCompat.Dark"
          android:orientation="vertical"
          android:gravity="bottom">
      
          <TextView
              android:id="@+id/tv_username"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
      
      </LinearLayout>
      

      我在 Activity 布局中的 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/drawer_header"
          app:menu="@menu/menu_drawer"/>
      

      顺便说一句,我在扩展 LinearLayout 时遇到了问题,其中未提供布局参数:

      TextView headerView = (TextView) LayoutInflater.from(this).inflate(R.layout.lay_header, null);
      headerView.setText("Your_thoght");
      

      希望对你有帮助。

      【讨论】:

      • 您似乎没有引用实际的 TextView 的 ID。当标题布局中有多个 TextView 时,您将如何区分或识别您想要的实际 TextView?我想你会把它作为一个视图膨胀然后从视图中你可以通过 id 获取 TextView?
      • @Nerudo,好吧,它在标题布局中:android:id="@+id/tv_username"。并通过 ID findViewById(R.id.tv_username); 引用它;
      猜你喜欢
      • 2011-12-23
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      相关资源
      最近更新 更多