【问题标题】:How to get the window instance from a view?如何从视图中获取窗口实例?
【发布时间】:2017-05-30 07:43:07
【问题描述】:

我通过mWindowManager.addview() 在 windowManager 中添加一个视图。现在我想知道是否可以获得window 实例。他们是 myView.getWindowID()myView.getWindowToken() 但我找不到从中检索窗口实例的方法

【问题讨论】:

    标签: android android-view android-windowmanager android-window


    【解决方案1】:

    如果您的View 已附加到Activity,您可以这样做。

    View view; // your view
    if (view.getContext() instanceof Activity) {
        Window window = ((Activity) view.getContext()).getWindow();
    }
    

    API 19 之后,有一个方便的检查方法,view.isAttachedToWindow()

    【讨论】:

    • 是的,谢谢,但没有太多惊喜,您的代码给了我应用程序的窗口,而不是视图所在的窗口:( 即当我们调用方法 addView 时由 windowManager 创建的窗口
    【解决方案2】:

    您无法从ViewWindowManager 获取window 实例。 但是你可以通过调用这个方法myView.getDisplay()来获得视图的window所附加的Display

    已编辑 - 您可以使用 View.bringToFront();View.bringChildToFront(View child); 重新排列视图的 z-index。

    【讨论】:

    • 谢谢毗湿奴...我想知道为什么无法检索窗口实例?实际上我需要它,因为我想看看是否可以更改它的 z 顺序 (stackoverflow.com/questions/44231597/…)
    • 最近添加的 z 顺序视图 addView() 位于顶部。因此,如果您删除一个视图并在同一视图上再次调用 addView() ,它就会出现在顶部。另一种方法是将单个 FrameLayout 添加到窗口管理器,然后将其他视图添加到此框架布局,以便您在 FrameLayout 中操作视图的 z 顺序
    • 谢谢毗湿奴,接缝你明白了。是的,最近添加的视图(通过 windowmanager)的 z 顺序在顶部,但是将其删除以将其添加回来会使视图在视觉上消失并重新出现,这不是很方便:(
    • 你可以使用 View.bringToFront();或 View.bringchildToFront(查看孩子);重新排序 z-index
    【解决方案3】:

    myView.getDisplay() 您可以使用此方法显示视图。

    【讨论】:

    • 感谢 mageNative,但我可以用 getDisplay 做什么?
    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2018-04-26
    • 2014-02-04
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多