【问题标题】:Children of FrameLayout not clickable on some devicesFrameLayout 的子项在某些设备上不可点击
【发布时间】:2012-06-21 15:36:38
【问题描述】:

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

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

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

最后,我还要说,我已经在模拟器中进行了测试,我发现 android v2.3 和 android v4 显示的行为与 ray 相同。目前,除了可以完美运行我的应用程序的 android v2.2 之外,我确信这些是唯一的。我对是否相信模拟器上的测试结果犹豫不决。

我个人很困惑,因为没有错误消息可以继续,但是有人可以提出解决方案吗?

【问题讨论】:

    标签: android onclick android-framelayout xml-layout


    【解决方案1】:

    我找到了解决方案。

    事实证明,我的布局中有一个流浪的ScrollView,它在我的根布局上方以 z 顺序排列并且默认情况下可见。我没有切换这个视图的可见性,而是为了它的子布局。哎呀。

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

    ScrollView 是布局的必需部分,所以我不能直接删除它。相反,我将 android:visibilty 属性赋予了 ScrollView,以便在界面需要它之前它将是 GONE,并且它不会阻止用户单击按钮。

    【讨论】:

    • 但是如果 ScrollView 不能不可见呢?我已经尝试过了,但是 ScrollView 中的所有内容都变得不可见。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2018-11-14
    • 2016-01-24
    相关资源
    最近更新 更多