android Position AlertDialog在4.1中不能像在2.3上一样工作

时间:2012-09-20 17:25:31

标签: android position android-alertdialog

我有一个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版本模拟器的屏幕截图: enter image description here

任何人都可以帮我解决这个问题吗? 此高度也适用于Ld,Md。但对于Hd& xD这个高度似乎很小&底部留有更多空间。如何根据屏幕高度设置高度。

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:3)

我通过测试Android操作系统版本设置了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版及以下版本的Android对LayoutParams的重力区别对待,因此上述设置完美并且工作正常。

希望这种分享有助于某人。