【问题标题】:How Do I Make CircleImageView Clickable In NavigationView Drawer如何在 NavigationView 抽屉中使 CircleImageView 可点击
【发布时间】:2016-04-01 11:33:11
【问题描述】:

您好,我知道这个问题已经有人问过了。但是正如搜索的那样,他们的解决方案都不适用于这个主题。 我编译了 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}

}

有没有办法让它可以点击?

【问题讨论】:

    标签: java android android-navigationview circleimage


    【解决方案1】:

    首先你必须访问你用来膨胀的 headerlayout,可以这样做,

    View headerLayout = navigationView.getHeaderView(0);
    

    然后从 headerLayout 你可以使用

    ImageView profileimage = (ImageView)headerLayout.findViewById(R.id.yourImage);

    然后你可以将它设置为可点击。

    【讨论】:

      【解决方案2】:

      这是 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);
      

      【讨论】:

      • 我可以知道为什么是 getHeaderView(0) 吗?这是指它的堆栈排列吗?
      猜你喜欢
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 2015-04-13
      • 2016-10-03
      相关资源
      最近更新 更多