使用 android 设计支持库将 onClickListener 添加到导航视图 header
add onClickListener to navigation view header using android design support library
我想将 onClickListener 添加到导航视图 header 的项目,例如更改 TextView 文本或为 ImageView 设置图像。
在您的 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 日
随着支持库的更新,将 header 添加到 xml 中的导航视图不起作用,可能是一个错误。
添加 header 视图
在 java.
中将视图膨胀为导航视图 header
mNavigationView.inflateHeaderView(R.layout.layout_header_profile);
希望对您有所帮助。
快乐编码...
你可以这样做 -
View header = navigationView.getHeaderView(0);
TextView text = (TextView) header.findViewById(R.id.textView);
或者如果您有多个 headers:
navigationView.getHeaderCount();
在您的视图中 XML 中设置 onClickListener,如下所示:
android:onClick="onLabelClick"
然后在你的activity
public void onLabelClick(View view) {
// do stuff :)
}
我想将 onClickListener 添加到导航视图 header 的项目,例如更改 TextView 文本或为 ImageView 设置图像。
在您的 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 日
随着支持库的更新,将 header 添加到 xml 中的导航视图不起作用,可能是一个错误。
添加 header 视图 在 java.
中将视图膨胀为导航视图 headermNavigationView.inflateHeaderView(R.layout.layout_header_profile);
希望对您有所帮助。 快乐编码...
你可以这样做 -
View header = navigationView.getHeaderView(0);
TextView text = (TextView) header.findViewById(R.id.textView);
或者如果您有多个 headers:
navigationView.getHeaderCount();
在您的视图中 XML 中设置 onClickListener,如下所示:
android:onClick="onLabelClick"
然后在你的activity
public void onLabelClick(View view) {
// do stuff :)
}