gpt4 book ai didi

java - Dialog View 如何与其 Activity 的 View 层次结构集成

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:57 25 4
gpt4 key购买 nike

我是 Android 的新手,在尝试了解对话框的工作原理时,我遇到了以下问题。对于 Activity,一旦通过 setContentView(View) 设置了 View Hierarchy,除非重新创建 Activity,否则无法更改 View 层次结构。这就是在旋转设备时重新创建 Activity 的原因,以便可以使用新的 View 层次结构布局。然而,假设上述陈述是正确的,那么在创建对话框时,对话框如何适应 Activity View 层次结构?它们只是漂浮在 Activity 窗口上方,在 Activities View 层次结构中没有明显的空间?尽管它们肯定以某种方式与 Activity 相关联,因为 getActivity() 方法返回一个有效的 Activity 实例。任何指示或澄清将不胜感激。

最佳答案

对话框实际上并不是 Activity View 层次结构的一部分。通过 WindowManager 添加对话框.

检查 Dialog 的源代码.当 Dialog 被实例化时,它从上下文中获取对 WindowManager 的引用,并初始化一个新的 Window。

mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Window w = PolicyManager.makeNewWindow(mContext);

然后,当您show() 对话框时:

WindowManager.LayoutParams l = mWindow.getAttributes();
try {
mWindowManager.addView(mDecor, l);
mShowing = true;

当您调用 setContentView() 时,您提供的 View 将附加到 Activity 的默认窗口。当您调用 Dialog.show() 时,对话框的 View 会附加到同一显示的不同窗口。这就是为什么它们都显示出来,但实际上并不是同一 View 层次结构的一部分。

关于java - Dialog View 如何与其 Activity 的 View 层次结构集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24540497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com