Dialog View如何与其Activity的视图层次结构集成

时间:2014-07-02 20:31:07

标签: java android

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

1 个答案:

答案 0 :(得分:6)

对话框实际上不是活动视图层次结构的一部分。通过WindowManager添加对话框。

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

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()时,您提供的视图会附加到活动的默认窗口。当您调用Dialog.show()时,对话框的视图将附加到同一显示的不同窗口。这就是为什么它们都显示而不是实际上属于同一视图层次结构的原因。