定位&调整Android DialogFragments

时间:2016-06-03 13:12:02

标签: android android-fragments xamarin.android

我们有以下情况:

用户可以在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没有成功。

1 个答案:

答案 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();
}