点击button的上半部分 – 不起作用?

我有4个相对的布局:( 正如你在animation中看到的那样

  • 绿色的RelativeView
  • types的东西和图标 ”RelativeView
  • 灰色的散布者RelativeView
  • 底部Textview

每个RelativeView都在之前的相对视图的“下方”。

在这里输入图像说明

按照devise,当两个内部视图closures时,button应该是绿色的上半部分 ,文本的上半部分 (就像animation所示)

好的,所以我添加了一个在“底部文本视图”中find的button

但为了让底部看上去只有一半,我加了一个负数的保证金:

所以这里 没有负余量:

在这里输入图像说明

这里是负边际(期望的结果)

在这里输入图像说明

所以,当我点击button,我只是隐藏/显示(animation与android:animateLayoutChanges="true" )内部2中间的意见

那么问题在哪里?

我不知道为什么,但只有button的下半部分是可点击的! 我想这是因为这一半是在其容器视图内,而上半部分不在其视图中…(也许我错了)

但是,如果我删除负余量和button是完全在其容器中 – 那么button是100%完全clickeable(上半部分和下半部分)

正如你可以看到在animation(最后一帧) – 当我点击上半部分 – 没有任何反应….

我该如何解决这个问题?

也许我采取了错误的初始方法

NB: 更多的可视化结构 :

在这里输入图像说明

Solutions Collecting From Web of "点击button的上半部分 – 不起作用?"

把你的button作为一个兄弟的RelativeLayouts,而不是作为一个孩子。 这工作,你想要的。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true">![enter image description here][1] <RelativeLayout android:id="@+id/red" android:background="@android:color/holo_red_dark" android:layout_width="match_parent" android:layout_height="100dp"> </RelativeLayout> <RelativeLayout android:id="@+id/green" android:layout_below="@id/red" android:background="@android:color/holo_green_dark" android:layout_width="match_parent" android:layout_height="100dp"> </RelativeLayout> <RelativeLayout android:id="@+id/blue" android:background="@android:color/holo_blue_dark" android:layout_below="@id/green" android:layout_width="match_parent" android:layout_height="100dp"> </RelativeLayout> <Button android:id="@+id/button" android:layout_centerHorizontal="true" android:layout_below="@id/green" android:layout_width="wrap_content" android:text="Hide Green" android:layout_marginTop="-24dp" android:layout_height="wrap_content"/> </RelativeLayout> 

看起来像这样,当setVisibility在GONE / VISIBLE之间切换为绿色RelativeLayout时,button向上/向下移动

看起来像这样,当setVisibility在GONE / VISIBLE之间切换为绿色RelativeLayout时,按钮向上/向下移动

你的button属于底部RL。 当android路由ACTION_DOWN时,它会检查布局的边界,并将事件提供给内部具有事件坐标的viewgrops(VG)。 然后,根据它的坐标,VG先生事件给它的孩子。

所以当你点击你的button的上部触摸事件给予灰色RL和button,蓝色RL的RL没有得到它。 其实事件发生在Window – > Root ViewGroup – > Some Other ViewGroup – > View。 路由基于坐标发生。 ACTION_DOWN开始触摸,但并非所有MotionEvent都以这种方式处理。

作为一种解决scheme,您可以将button移动到另一个可以正确路由触摸事件的组视图。 或者也许尝试使用触摸代表。