我有一个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这个高度似乎很小&底部留有更多空间。如何根据屏幕高度设置高度。
非常感谢任何帮助。
由于
答案 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的重力区别对待,因此上述设置完美并且工作正常。
希望这种分享有助于某人。