【问题标题】:add onClickListener to navigation view header using android design support library使用 android 设计支持库将 onClickListener 添加到导航视图标题
【发布时间】:2015-09-20 14:03:17
【问题描述】:

我想将 onClickListener 添加到导航视图标题的项目中,例如更改 TextView 文本或为 ImageView 设置图像。

【问题讨论】:

  • 这个问题可能会受益于一些代码,例如展示你到目前为止所做的尝试。
  • 我没有尝试这部分的任何代码,我想要一些类似 gmail 应用程序在导航视图标题中所做的事情。
  • 人们不会给出那样的代码。你自己先试试吧。

标签: android androiddesignsupport navigationview


【解决方案1】:

在您的 activity_main.xml 布局中添加导航抽屉代码。

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">

<include layout="@layout/toolbar"/>

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawerLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/containerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"></FrameLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigationView"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:layout_marginTop="-24dp"
        app:headerLayout="@layout/drawer_header"
        app:itemTextColor="@color/black"
        app:menu="@menu/nav_menu"/>

</android.support.v4.widget.DrawerLayout>

并在布局目录中添加您的drawer_header.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
    android:clickable="true"
    android:paddingTop="20dp"
    android:id="@+id/textView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="My header"
    android:textAppearance="?android:attr/textAppearanceLarge"/>

将 nav_menu.xml 添加到您的菜单目录

<?xml version="1.0" encoding="utf-8"?>

<group
    android:id="@+id/main_features"
    android:checkableBehavior="single">
    <item
        android:id="@+id/idHome"
        android:title="Home" />

    <item
        android:id="@+id/favorite"
        android:title="Favorites" />


   <item
        android:id="@+id/idSettings"
        android:title="Settings" />


</group>

在你的 MainActivity.java 中监听点击

 DrawerLayout mDrawerLayout;
 NavigationView mNavigationView;
 TextView header;

然后在你的 onCreate() 中初始化它们:

 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
 mNavigationView = (NavigationView) findViewById(R.id.navigationView);
  header = (TextView) findViewById(R.id.textView5);
    header.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getBaseContext(),"Calling Header", Toast.LENGTH_LONG).show();
        }
    });

更新:2015 年 10 月 27 日

随着支持库的更新,在 xml 中向导航视图添加标题不起作用,可能是它的错误。

添加标题视图 在java中将视图膨胀为导航视图标题。

mNavigationView.inflateHeaderView(R.layout.layout_header_profile);

希望它会有所帮助。 快乐编码...

【讨论】:

  • 谢谢我已经添加了导航视图,我只想要标题的处理程序,谢谢
  • 请注意,从支持 appcompat 库 v23.1 获取 headerView 参考的方法是调用navigationView.getHeaderView(0)(如果您只有一个标头)
【解决方案2】:

你可以这样做 -

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

或者如果您有多个标题:

navigationView.getHeaderCount();

Reference

【讨论】:

    【解决方案3】:

    在您的视图中设置 XML 中的 onClickListener,如下所示:

    android:onClick="onLabelClick"
    

    然后在你的活动中

    public void onLabelClick(View view) {
        // do stuff :)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多