首页 > 解决方案 > 子可点击/父长可点击

问题描述

我有一个FrameLayoutwithTextView在里面。

<FrameLayout
    android:id="@+id/fl_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/selectableItemBackground">

    <TextView
        android:id="@+id/tv_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:linksClickable="true"
        android:autoLink="email|web|phone"/>
</FrameLayout>

TextView如您所见,我为电子邮件/网络/电话启用了自动链接。但我FrameLayoutLongClickListener代码。

flContainer.setOnLongClickListener { 
        // some work
    }

但是,当我尝试通过子 TextView 对父 FL 进行长按时,它不起作用,因为电视拦截了点击并且不允许父获得长按。我知道简单的解决方案 - 只需将相同的 longClickListener 应用于 TextView,但我android:background="?attr/selectableItemBackground"的 FL 上有,所以当我点击它时它应该有涟漪效应,但电视会消耗它。有可能实现这一目标吗?

标签: androidonclicklisteneronlongclicklistener

解决方案


android:addStatesFromChildren="true"在您的父布局中使用。如文档中所述,

设置此 ViewGroup 的可绘制状态是否还包括其子级的可绘制状态。例如,这用于使一个组在其子 EditText 或按钮获得焦点时显示为焦点。

你可以在这里找到它:

android.view.ViewGroup


推荐阅读