我做了一个自定义对话框。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="myBackgroundStyle"
parent="@android:style/Theme.Translucent.NoTitleBar" />
</resources>
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>
答案 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;它会起作用。我试过了。