Android 如何让单击事件通过子视图到达其父视图(并更改背景)

Android 如何让单击事件通过子视图到达其父视图(并更改背景),android,android-layout,Android,Android Layout,整个事情看起来是这样的: +---------+---------+ | Mon | 10:00AM | +---------+---------+ 这是一个带有两个文本视图的线性布局。我希望单击事件通过“Mon”部分,并在单击时更改LinearLayout的背景上午10:00'仍需要接受单独的单击事件 XML: <LinearLayout android:layout_width="match_parent" android:layout_height="50d

整个事情看起来是这样的:

+---------+---------+
|   Mon   | 10:00AM |
+---------+---------+
这是一个带有两个文本视图的线性布局。我希望单击事件通过“Mon”部分,并在单击时更改LinearLayout的背景上午10:00'仍需要接受单独的单击事件

XML:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:background="@drawable/button_filled_white"
    android:clickable="true"
    >
    <TextView android:text="MON"
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
                 android:layout_weight="1"
                 android:clickable="false"
                 android:enabled="false"
                 android:focusable="false"
        />
    <TextView android:text="10:00AM"
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
                 android:layout_weight="1"
                 android:id="@+id/txtTime"
        />
</LinearLayout>

为了让click事件进入“MON”文本视图,我尝试在各种组合中将clickable、focusable和enabled设置为false,但LinearLayout的背景没有改变

如果删除子文本视图,则可以单击LinearLayout,单击时可以看到背景颜色的变化:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:background="@drawable/button_filled_white"
    android:clickable="true"
    />

我知道ViewGroup.onInterceptTouchEvent()但我正在寻找一种XML方式,因为处理ViewGroup.onInterceptTouchEvent()需要特定于情况和视图id的实现。

您可以尝试设置

android:focusable="false"
对于“Mon”子视图,您可以尝试设置

android:focusable="false"

对于您的“Mon”child视图

很抱歉回答我自己的问题,但为了帮助有相同问题的人,我将提供更多详细信息

根本原因是NestedScrollView

实际上,我在NestedScrollView中合成了LinearLayout,这阻止了clickable&focusable=false正常工作。设置为true实际上可以按预期工作(更改背景等)。但设置为false只起到预期的一半作用-忽略单击,但不将单击事件传递给父级


因此,如果有人有同样的问题,请查看您的父容器(或父容器的父容器)。如果它是可滚动的容器,您将面临更多的挑战。

很抱歉回答我自己的问题,但为了帮助有相同问题的人,我将提供更多细节

根本原因是NestedScrollView

实际上,我在NestedScrollView中合成了LinearLayout,这阻止了clickable&focusable=false正常工作。设置为true实际上可以按预期工作(更改背景等)。但设置为false只起到预期的一半作用-忽略单击,但不将单击事件传递给父级


因此,如果有人有同样的问题,请查看您的父容器(或父容器的父容器)。如果它是可滚动的容器,您将面临更多挑战。

检查此答案:嗨@Sam,我阅读了答案,在那里我看到了3个答案。对于#1答案,我知道ViewGroup.onInterceptTouchEvent()但是因为它需要特定于情境和视图id的实现,所以我想知道是否有一种XML方法——指定一个视图来忽略所有触摸事件或类似的东西。对于#2答案,我尝试将focusable、clickable设置为false,但在这种情况下不起作用。对于#3,调用parent.performClick()并不完全是我想要的,因为我希望向下和向上以及事件分别发生,因此其背景会相应地发生变化。检查以下答案:嗨@Sam,我阅读了答案,我在那里看到了3个答案。对于#1答案,我知道ViewGroup.onInterceptTouchEvent()但是因为它需要特定于情境和视图id的实现,所以我想知道是否有一种XML方法——指定一个视图来忽略所有触摸事件或类似的东西。对于#2答案,我尝试将focusable、clickable设置为false,但在这种情况下不起作用。对于#3,调用parent.performClick()并不完全是我想要的,因为我希望向下和向上以及事件分别发生,因此其背景会相应地发生变化。您好@djodjo,我只是尝试设置可聚焦,但由于某种原因,这不起作用,尽管我真的希望它能起作用。。。给出了什么?我做了更多的测试,虽然布局非常相似,但它在某些情况下有效,但在其他情况下无效。我会努力找出原因,我找到了原因。线性布局实际上是NestedScrollView的子级,所以我以前的所有尝试都失败了。嗨@djodjo,我只是尝试设置可聚焦,但由于某种原因,这不起作用,尽管我真的希望它能起作用。。。给出了什么?我做了更多的测试,虽然布局非常相似,但它在某些情况下有效,但在其他情况下无效。我会努力找出原因,我找到了原因。线性布局实际上是NestedScrollView的子级,因此我以前的所有尝试都失败了。在NestedScrollView中找到解决方案了吗?现在遇到这个问题-我有一个NSV,里面有一个线性布局,里面有文本视图。只有文本视图外部的LinearLayout部分是可单击的。在嵌套的ScrollView中找到解决方案了吗?现在遇到这个问题-我有一个NSV,里面有一个线性布局,里面有文本视图。只有文本视图外部的线性布局部分才可单击。