FrameLayout的孩子在某些设备上无法点击

时间:2012-06-21 15:36:39

标签: android onclick android-framelayout xml-layout

我设计了一个菜单,其中包含几个不同LinearLayouts中的几个按钮,这些按钮全部放在FrameLayout内的动画GLSurfaceView上。当用户单击界面中的按钮时,我会在进行下一个布局GONE之前将当前布局的可见性设置为VISIBLE。当用户选择一个级别时,则开始游戏并且所有布局都为{{1 (除了屏幕右侧的控制栏,但不包含在FrameLayout中)

在大多数手机上,菜单就像魅力一样,但我对Xperia Ray进行了快速测试,发现我无法去任何地方,因为按钮不会点击。我在大多数onClick侦听器中都设置了GONE个标签,在这种情况下,它们没有在Logcat中显示,因此看起来听起来似乎没有触发。我还注意到GLSurfaceView没有从它自己的TouchEventListener返回任何东西。即使在顶部菜单上禁用通过点击GLSurfaceView触发的功能,我通常仍会在Logcat中收到消息。

我认为这可能与我使用FrameLayout的方式有关。 documentation说它应该只有一个孩子,但是我在Android开发者上读到的另一篇文章通过在FrameLayout内的ImageViews上显示文本来演示字幕图像。

最后一点,我还会说我已经在模拟器中测试过,我发现android v2.3和android v4都显示出与光线相同的行为。目前这些是我唯一确定的,除了完全运行我的应用程序的android v2.2。我不相信测试模拟器的结果。

我个人感到难过,因为没有任何错误消息可以继续,但有人可以建议解决方案吗?

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。

事实证明,我的布局中有一个流浪ScrollView,它在z顺序上位于我的根布局之上,默认情况下可见。我没有切换这个视图的可见性,而是为了它的子布局。糟糕。

在我测试的大多数设备上,迷路ScrollView并没有影响我的应用程序的功能,可能是因为空布局允许点击它后面的按钮。然而事实证明,某些设备(例如Xperia Ray)对点击是否可以通过布局传递(可能是性能决策)更为严格。

ScrollView是布局的必需部分,因此我无法将其删除。相反,我将android:visibilty属性赋予ScrollView,以便在接口需要它之前它为GONE,并且不会阻止用户点击按钮。