【问题标题】:how to show a "window/subactivity/dialog" on top of an Activity but keeping the focus in the Activity如何在活动顶部显示“窗口/子活动/对话框”但将焦点保持在活动中
【发布时间】:2011-11-03 18:09:37
【问题描述】:

我的活动 A 是一个游戏,它执行一些后台操作。当我在上下文菜单中按下一个按钮时,我想弹出一个“小窗口/对话框/子活动”(我们称之为 B),它出现在活动 A 的顶部并显示有关这些后台操作的一些数据。但我需要将注意力集中在活动 A 上,以便继续与它互动(玩游戏)。

本质上,我希望能够在玩游戏时看到B显示的数据。

我不确定如何实现这一点。阅读文档后,我得出以下结论:

  • 我知道我不能使用对话框,因为它有焦点。是否可以避免这种情况?
  • 使用带有对话框主题的子活动是另一种看起来很诱人的选项...但我相信子活动具有焦点。同上。
  • 我的最后一个选择是尝试将带有我的数据的 LinearLayout 添加到主布局,“共享/拆分”屏幕。这并不漂亮,但至少我知道这是可能的。我不喜欢这种方法的地方是我使用了屏幕的宽度和高度。

有什么建议吗?解决方案?

PS:我在这里找到了一些与我的问题非常相关的主题:

【问题讨论】:

  • 您在为 B 谈论多少信息?如果 B 可以是被动的,为什么不使用 Toast?
  • 我想过,但是 TOAST 在 X 时间后消失了。此外,我想看看我的信息如何实时变化,我认为你不能用 Toasts 做到这一点。

标签: java android android-activity dialog subactivity


【解决方案1】:

创建一个样式为Theme.Dialog 的活动。这是一个正常的活动,看起来像一个对话框,同时是无模式的并接受事件。

其他问题在于设置WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL 和重置WindowManager.LayoutParams.FLAG_DIM_BEHIND

完整示例请参见此答案:timed modeless dialog

【讨论】:

  • 谢谢!我要试试。快速提问:你知道在使用这种方法时是否调用了主要活动的 onPause() 方法吗?这也很重要...谢谢!
  • 我很确定会在这里调用 onPause() 方法。不过,这很容易测试。祝你好运!
【解决方案2】:

为什么不使用属于 Activity 的 FrameLayout?只需确保此视图具有更高的 z 索引(确保您在 XML 布局中最后声明它或在运行时创建它)。这样您就永远不会离开您的 Activity。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多