我们有以下情况:
用户可以在Activity中选择一个按钮,导致显示DialogFragment。
这个DialogFragment的位置使得DialogFragment中的视图(让我们称之为anchoredView)直接位于被按下的按钮上。这很好。
用户可以在DialogFragment中进行交互,但用户进行的某些操作可能导致在DialogFragment的FrameLayout中加载另一个Fragment。这会导致DialogFragment的大小调整,结果导致anchoredView不再与初始按钮对齐。
为了解决这种错位,我们先看看我们应该设置DialogFragment的(x,y)是什么,这会导致anchoredView再次正确定位,直接在原始按钮上。
但是......我们最终得到了一个理想的视觉方面,即当DialogFragment的大小增加时,我们会简单地看到片段变大,然后在(x,y)时跳回已设定。
由于(x,y,)的设置,似乎会出现额外的布局,但是当尺寸发生变化时,这不会发生,因此您会发生这种视觉跳跃。在设置(x,y)时检查当前是否在布局中显示我们当前处于布局中,AFAIK将在下一个布局上发生此更改。
无论如何,我们可以得到这个,以便移动和重新调整大小(由于FrameLayout中新片段的规范)在相同的布局中发生,以期有望放松视觉跳跃'
我们已经尝试调整SizeChanged,OnMeasure&中的(x,y)。我们的DialogFragment中的根布局的OnLayout没有成功。
答案 0 :(得分:0)
您需要在DialogFragment中覆盖onResume()方法,如下所示:
@Override
public void onResume() {
final Window dialogWindow = getDialog().getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.x = 100; // set your X position here
lp.y = 200; // set your Y position here
lp.width = 300; // set your Width here
lp.height = 400; // set your Height here
dialogWindow.setAttributes(lp);
super.onResume();
}