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,里面有一个线性布局,里面有文本视图。只有文本视图外部的线性布局部分才可单击。