Android 长时间单击侦听器不处理viewgroup的子视图

Android 长时间单击侦听器不处理viewgroup的子视图,android,android-studio,android-layout,Android,Android Studio,Android Layout,我有一些在我的主布局的子视图,我需要,如果我长按主布局,然后它将调用onLongpress从布局中的任何地方。但如果我长按child view,它就不起作用了 就像在我的演示中一样,我需要一个relayvelayout,其中我有按钮,我在relativelayout上应用了longclicklistener,在button上应用了onCLicklistener 现在,longclick在relativelayout接受按钮区域内的每个位置都工作 我希望longclick也能在按钮区域工作,我不想

我有一些在我的主布局的子视图,我需要,如果我长按主布局,然后它将调用onLongpress从布局中的任何地方。但如果我长按child view,它就不起作用了

就像在我的演示中一样,我需要一个relayvelayout,其中我有按钮,我在relativelayout上应用了longclicklistener,在button上应用了onCLicklistener 现在,longclick在relativelayout接受按钮区域内的每个位置都工作

我希望longclick也能在按钮区域工作,我不想调用btn.performlongclick()

这是我的密码,有人能帮我吗

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    android:id="@+id/mainLayout"
    android:background="@android:color/holo_blue_dark"
    tools:context=".MainActivity">
    
    
    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:backgroundTint="#00bcd4"
        android:text="Button click"
        android:textColor="@android:color/white"
        android:textSize="25sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
        
    </RelativeLayout>






import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Button
import android.widget.Toast

public class DemoActivity : AppCompatActivity() {

    lateinit var mainLayout: View
    lateinit var btn: Button;

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_demo)
        mainLayout=findViewById(R.id.mainLayout)
        btn=findViewById(R.id.btn)
        mainLayout.setOnLongClickListener(View.OnLongClickListener {
            Toast.makeText(applicationContext, "Long Pressed".toString(), Toast.LENGTH_SHORT).show()
            return@OnLongClickListener false

        })
        btn.setOnClickListener(View.OnClickListener {
            Toast.makeText(applicationContext, "btn Pressed".toString(), Toast.LENGTH_SHORT).show()
        })
    }
}

导入android.os.Bundle
导入android.support.v7.app.AppActivity
导入android.view.view
导入android.widget.Button
导入android.widget.Toast
公共类DemoActivity:AppCompatActivity(){
lateinit var主布局:视图
lateinit var btn:按钮;
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u演示)
mainLayout=findViewById(R.id.mainLayout)
btn=findViewById(R.id.btn)
mainLayout.setOnLongClickListener(View.OnLongClickListener{
Toast.makeText(applicationContext,“长按”.toString(),Toast.LENGTH\u SHORT.show())
return@OnLongClickListener假的
})
btn.setOnClickListener(View.OnClickListener{
Toast.makeText(applicationContext,“btn Pressed.toString(),Toast.LENGTH\u SHORT.show())
})
}
}

您是否可以尝试通过在中的按钮上设置属性来禁用给定按钮的长单击侦听器
XML:
android:longClickable=“false”

您可以为两者设置相同的长单击侦听器

private val longClickListener = View.OnLongClickListener { 
    // do something when button and main layout long clicked
}

btn.setOnLongClickListener(longClickListener)
mainLayout.setOnLongClickListener(longClickListener)
btn.setOnClickListener {
    // do something when button clicked
}

您不想调用btn.performlongclick()有什么原因吗?是的,因为我在运行时从不同的类添加视图,所以我需要在所有视图中发送所有必需的数据。在这种情况下,您可以尝试在按钮中添加`android:duplicateParentState=“true”吗?已经这样做了,但不起作用