美好的一天,我知道这个问题已经被问到了。但是经过搜索,他们的解决方案都不适用于我这个主题。
我编写了gradle - compile 'de.hdodenhof:circleimageview:1.3.0'
。我创建了header.xml
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/profile_image"
android:layout_width="80dp"
android:layout_height="80dp"
app:border_color="#FF000000"
android:layout_marginLeft="24dp"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_margin="@dimen/activity_vertical_margin"
android:layout_marginStart="@dimen/activity_vertical_margin"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:src="@drawable/avatar"
android:foreground="?attr/selectableItemBackground"
android:onClick="onClick"
android:clickable="true" />
我的navigationView
。
<!--NAVIGATION DRAWER-->
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/header"
app:menu="@menu/navigation_drawer"
app:itemIconTint="@color/colorTextNavigationView" />
在我的java文件activity_main.java
中我尝试了onClickListener但它会停止我的程序 - nullPointerException(无法映射我的circleImageView findViewById)。甚至setNavigationItemSelectedListener如果单击圆形图像也不会启动意图。
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
mDrawerLayout.closeDrawers();
int id = menuItem.getItemId();
switch (id){ // INTENTS HERE}
}
有没有办法让这个可点击?
答案 0 :(得分:2)
首先,您必须访问用于充气的headerlayout,可以这样做,
View headerLayout = navigationView.getHeaderView(0);
然后从headerLayout中,您可以使用
获取imageview ImageView profileimage = (ImageView)headerLayout.findViewById(R.id.yourImage);
然后你可以将它设置为可点击它。
答案 1 :(得分:0)
这是 nav_header_main.xml
(此处Layout_ww表示宽度和高度为 wrap_content )
<?xml version="1.0" encoding="utf-8"?>
<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="200dp"
android:background="@drawable/nav_header"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/navimgProfile"
android:layout_width="@dimen/eighty_dp"
android:layout_height="@dimen/eighty_dp"
android:layout_gravity="center_horizontal"
app:civ_border_color="@color/white" />
<TextView
android:id="@+id/nav_profile_name"
style="@style/Layout_mw"
android:gravity="center"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="Android Studio" />
<TextView
android:id="@+id/pro_location"
style="@style/Layout_mw"
android:layout_marginTop="@dimen/ten_dp"
android:gravity="center"
android:text="android.studio@android.com" />
</LinearLayout>
在行为中,导航表示如下:
在onCreate中:
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
View header = navigationView.getHeaderView(0);
CircleImageView imgProfile = (CircleImageView) header.findViewById(R.id.navimgProfile);
proName = (TextView) header.findViewById(R.id.nav_profile_name);
proLocation = (TextView) header.findViewById(R.id.pro_location);
proName.setText(USERNAME);
proLocation.setText(Navemail);