ConstraintLayout 不处理点击

ConstraintLayout not handling clicks

我在 FrameLayout:

中有一个空的 ConstraintLayout(我将其用作叠加层)
<FrameLayout 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=".ui.home.HomeFragment">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/overlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#80000000"
        android:clickable="true"
        android:focusable="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

</FrameLayout>

我附加了一个事件侦听器:

public class HomeFragment extends Fragment implements View.OnClickListener {
    ...
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.overlay:
                // Do something
                break;
        }
    }
}

问题是当点击覆盖时,Some code here 没有被执行。删除 android:clickableandroid:focusable 没有帮助。这个问题有解决办法吗?

findViewById(R.id.overlay).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    //Do something
    }
}

这将完成工作。我在您的代码中没有看到您实际将 onclicklistener 设置为叠加视图的位置。

在您的 oncreate 方法中添加:

setOnClickListener(this)

并执行以下操作:

public class MainActivity extends Appcomatactivity implements View.OnClickListner

你需要像dis

ConstraintLayout parent = findViewById(R.id.parent);

parent.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    
                }
            });