如何设置对话框的位置?

时间:2011-08-08 08:10:14

标签: java android dialog

我做了一个自定义对话框。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="myBackgroundStyle"
        parent="@android:style/Theme.Translucent.NoTitleBar" />
</resources>

screenshot

Dialog dialog = new Dialog(this, R.style.myBackgroundStyle);
dialog.setContentView(R.layout.dialog);

dialog.show();

WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.y = 225; params.x = 225;
params.gravity = Gravity.TOP | Gravity.LEFT;       
dialog.getWindow().setAttributes(params); 

但问题是它出现在左上角,我无法找到将其放置在我需要的地方。 params.y=225; params.x=225;以某种方式不会影响它。

有什么想法吗?


编辑: 如果我有像这样的xml(style / Theme.Dialog),那么参数和位置工作正常,但会出现模态阴影。有没有办法删除它?

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="myBackgroundStyle" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">false</item>
    </style>
</resources>

5 个答案:

答案 0 :(得分:7)

尝试创建一组新参数:

WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.y = 225; params.x = 225;
params.gravity = Gravity.TOP | Gravity.LEFT;       
dialog.getWindow().setAttributes(params);

修改:如果您想保留窗口的属性,可以尝试将其添加为第二行:

params.copyFrom(dialog.getWindow().getAttributes());

但请注意,copyFrom方法完全没有记录,所以我不知道它是否能像它那样做。

答案 1 :(得分:4)

请尝试使用Theme.Panel作为样式parent

答案 2 :(得分:2)

不是100%肯定,但它与params.gravity=Gravity.TOP | Gravity.LEFT;有关吗?

另一个编辑

好的,这个应该更有用:Calling android dialog without it fading the background

答案 3 :(得分:2)

在上面的代码中行......

dialog.show();

应该出现在

之后
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.y = 225; params.x = 225;
params.gravity = Gravity.TOP | Gravity.LEFT;       
dialog.getWindow().setAttributes(params); 
...

通过首先显示对话框的内容,然后在对话框已经绘制到屏幕后设置x,y坐标。

答案 4 :(得分:0)

只需删除params.gravity = Gravity.TOP | Gravity.LEFT;它会起作用。我试过了。