0

我有一个 AlertDialog,其 Y 已设置并设置为显示在中心。它在 2.3 模拟器和设备上完美显示,但在 4.1(模拟器和 4.0 设备)上显示比预期的更多。这是代码:

        AlertDialog adg = scrnDlg.create();
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.copyFrom(adg.getWindow().getAttributes());
    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
    //lp.height = WindowManager.LayoutParams.MATCH_PARENT;
    lp.y = 05;
    lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
    adg.getWindow().setAttributes(lp);
                adg.show();
    /*  working with 2.3 but nt proper position with 4.0
        WindowManager.LayoutParams lp = adg.getWindow().getAttributes();
        lp.y = 05;
        lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
        adg.getWindow().setAttributes(lp);
        */

obth 版本模拟器的屏幕截图: 在此处输入图像描述

谁能帮我解决这个问题?这个高度也非常适合 Ld、Md。但对于 Hd 和 xD,这个高度似乎很小,底部留有更多空间。如何根据屏幕高度设置高度。

非常感谢任何帮助。

谢谢

4

1 回答 1

3

我终于通过测试 Android OS 版本来设置 Gravity 得到上述结果。这就是我的做法并按预期获得结果:

alertDlg.show(); 
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(alertDlg.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.y = 02;
if (MyActivity.Build_Version < Build.VERSION_CODES.ICE_CREAM_SANDWICH)
lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; 
else if (MyActivity.Build_Version >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
lp.gravity = Gravity.CENTER_HORIZONTAL;

alertDlg.getWindow().setAttributes(lp);

4.1 及 4.1 以下版本的 Android 对 LayoutParams 的重力有不同的处理,因此上述设置并完美运行。

希望这个分享对某人有所帮助。

于 2012-10-10T15:48:11.723 回答