Java 单击按钮的上半部分-不';不行?
我有4个相对布局:(正如你在动画中看到的)Java 单击按钮的上半部分-不';不行?,java,android,Java,Android,我有4个相对布局:(正如你在动画中看到的) 绿色相对论 “键入内容和图标”相对视图 灰色相对论 底部文本视图 每个RelativeView都位于它以前的相对视图的“下方” 根据设计,当两个内部视图关闭时,按钮应位于绿色上方的半顶部,文本上方的半底部(如动画所示) 好的,我添加了一个按钮,它位于“底部文本视图”中 但为了使底部仅位于视图上方的半底部,我添加了一个负边距: 因此,无负边际: 并且具有负的裕度(期望的结果) 因此,当我单击按钮时,我只需隐藏/显示(+animation wit
- 绿色相对论
- “键入内容和图标”相对视图
- 灰色相对论
- 底部文本视图
android:animateLayoutChanges=“true”
)内部的两个中间视图
那么问题出在哪里呢
问题
我不知道为什么,但只有下半部分的按钮是可点击的!我猜这是因为一半在它的容器视图中,而上半部分不在它的视图中…(也许我错了)
但是如果我去掉了负边距,并且按钮完全在它的容器中,那么按钮是100%完全可点击的(上半部分和下半部分)
正如您在动画(最后一帧)中所看到的,当我单击上半部分时,什么也没有发生
我怎样才能解决这个问题
也许我采取了错误的初始方法
注::
您的按钮属于底部RL。当android路由动作时,它会检查布局的边界,并将事件提供给内部有事件坐标的viewgrops(VG)。然后VG根据它的坐标将事件与它的子事件成比例 所以,当你们点击按钮触摸事件的上半部分时,灰色RL和蓝色RL的按钮并没有得到它。实际上,事件被赋予了窗口->根视图组->其他一些视图组->视图。路由是基于坐标的。这对于启动触摸的ACTION_DOWN是正确的,但并非所有MotionEvent都以这种方式处理
作为一种解决方案,您可以将按钮移动到另一个可以正确路由触摸事件的groupview。或者可以尝试使用触摸代理。将您的按钮作为亲戚的兄弟,而不是孩子。这是你想要的
<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>
![在此处输入图像描述][1]
看起来是这样的,当setVisibility在绿色RelativeLayout的GONE/VISIBLE之间切换时,按钮上下移动
你试过翻译而不是页边空白吗?@IT20请再帮我一点忙?(可能是代码)?我一整天都在工作-(试着用
android:translationY=-32dp
@iTwenty测试替换按钮xml中的android:layout\u marginTop=-32dp
,同样的结果:上半部分不可点击。也许,你想看看新的浮动操作按钮(FAB):我决定使用你的解决方案。效果很好(按钮没有移动,但我要修复它)-所以这里有一个问题:如果我有一个视图,我如何才能找到它底部的偏移量?(换句话说,在它们全部折叠之后-我需要将按钮“带”到第一个视图的底部)--视图
类有getTop()
和getBottom
是相对于父视图组的。对于不移动的按钮,如果您可以指定它相对于正在设置动画的视图的位置,您可以让它移动,而无需任何额外的努力。在我的示例中,如果我设置绿色RelativeLayout
的动画,则按钮也会随着它的移动而移动下面是layout\u=@id/green
明白了!工作!我将按钮设置为\u安卓:layout\u=“@id/viewGray1”\u
(视图灰色是分隔符,正如您已经知道的)带有负margniTop(当然,现在按钮是一个兄弟,就像您在回答中所说的那样)现在它运行得很好。非常感谢你让它工作起来了!:)顺便说一句,你是如何在你的问题中制作动画截图的?关于解决方案:现在我有另一个问题。我做的和你做的完全一样(我只是隐藏了内部的两个视图)这一切都很好。但当按钮折叠时,请看它的上半部分,它会随着灰色视图而褪色……请帮助:-)?-看这里(我怎样才能使上半部分不褪色?)