首页 > 解决方案 > Android Java 将 OnClick 设置为多个嵌套标签中的 ImageView

问题描述

大家好,我正在尝试创建一个在单击个人资料图片时会出现的菜单:

在此处输入图像描述

但正如您所见,ImageView 位于 cardView 内,而 cardView 又位于工具栏内,作为初始父级,我有一个 App Bar 布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    >


    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/primaryPopHome"
            android:minHeight="?attr/actionBarSize"
            android:theme="@style/AppTheme.bar"
            >


            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"


                android:scaleType="centerInside"
                android:src="@drawable/poplogo"

                />


            <androidx.cardview.widget.CardView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="300dp"
                android:innerRadius="0dp"
                android:shape="ring"
                android:thicknessRatio="1.9"
                app:cardCornerRadius="80dp">

                <ImageView
                    android:id="@+id/img_profilomain"
                    android:layout_width="42dp"
                    android:layout_height="42dp"

                    android:layout_alignParentTop="true"
                    android:layout_centerHorizontal="true"
                    android:backgroundTint="@color/white"
                    android:scaleType="centerCrop"

                    />
            </androidx.cardview.widget.CardView>


        </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.appcompat.widget.ActionMenuView
        android:id="@+id/mnuItem"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/appBarLayout"
        android:background="@color/def2"
        android:visibility="invisible"
        />


    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/add_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="16dp"
        android:src="@drawable/poplike"
        android:backgroundTint="@color/redButton2"
        app:borderWidth="0dp"
        app:fabSize="normal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <!--Floating action button for add alarm-->
    <!--Make sure that you are constraining this
        button to the parent button-->
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/add_alarm_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="24dp"
        app:fabSize="normal"
        app:layout_constraintBottom_toTopOf="@+id/add_fab"
        app:layout_constraintEnd_toEndOf="@+id/add_fab"
        app:layout_constraintStart_toStartOf="@+id/add_fab"
        app:srcCompat="@drawable/ic_baseline_add_24"
        app:borderWidth="0dp"
        android:backgroundTint="@color/redButton2"
        />

    <!--Action name text for the add alarm button-->
    <!--Make sure that you are constraining this Text to
        the add Alarm FAB button-->
    <TextView
        android:id="@+id/add_alarm_action_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:text="Crea Post"
        app:layout_constraintBottom_toBottomOf="@+id/add_alarm_fab"
        app:layout_constraintEnd_toStartOf="@+id/add_alarm_fab"
        app:layout_constraintTop_toTopOf="@+id/add_alarm_fab" />

    <!--Floating action button for add person-->
    <!--Make sure that you are constraining this
        button to the add Alarm FAB button-->
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/add_person_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="24dp"
        app:fabSize="normal"
        app:layout_constraintBottom_toTopOf="@+id/add_alarm_fab"
        app:layout_constraintEnd_toEndOf="@+id/add_alarm_fab"
        app:layout_constraintStart_toStartOf="@+id/add_alarm_fab"
        app:srcCompat="@drawable/ic_baseline_search_24"
        app:borderWidth="0dp"
        android:backgroundTint="@color/redButton2"
        />

    <!--Action name text for the add person button-->
    <!--Make sure that you are constraining this Text
        to the add Person FAB button-->
    <TextView
        android:id="@+id/add_person_action_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:text="Cerca utenti"
        app:layout_constraintBottom_toBottomOf="@+id/add_person_fab"
        app:layout_constraintEnd_toStartOf="@+id/add_person_fab"
        app:layout_constraintTop_toTopOf="@+id/add_person_fab" />

    <Button
        android:id="@+id/btn_logout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="152dp"
        android:text="Logout"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/appBarLayout"
        app:layout_constraintVertical_bias="0.111" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rcViewPostMain"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="56dp"
        app:layout_constraintTop_toBottomOf="@+id/appBarLayout"
        tools:layout_editor_absoluteX="-16dp" />


</androidx.constraintlayout.widget.ConstraintLayout>

我尝试从 java 代码中设置 OnClick 侦听器,但是当我运行应用程序时,单击图像时 onclick 不起作用:

 ImageView img_profilo = findViewById(R.id.img_profilomain);

        img_profilo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "d", Toast.LENGTH_SHORT).show();
                mnuItem.setVisibility(View.VISIBLE);
            }
        });

我也尝试使用工具栏来执行此操作,但无论如何它都不起作用:

tlb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "sad", Toast.LENGTH_SHORT).show();
            }
        });

编辑:它也不适用于这个

Toolbar toolbar = findViewById(R.id.toolbar);

        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

                if(item.getItemId() == R.id.img_profilomain)
                    Toast.makeText(MainActivity.this, "wds", Toast.LENGTH_SHORT).show();
                return true;
            }
        });

有人知道如何解决这个问题吗?

标签: javaandroidxmlandroid-toolbarandroid-appbarlayout

解决方案


推荐阅读