【问题标题】:How to set dialog's position?如何设置对话框的位置?
【发布时间】:2011-10-22 04:44:50
【问题描述】:

我已经制作了一个自定义对话框。

<?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>

【问题讨论】:

    标签: java android dialog


    【解决方案1】:

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

    另一个编辑

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

    【讨论】:

    • 不是真的,更像是在“Theme.Translucent.NoTitleBar”中。 IE。如果它的 Theme.Dialog,那么参数可以正常工作,但我得到了那个模态阴影。
    • 并非如此。该链接是关于从标题栏中删除那个小阴影,而我需要删除模型阴影(即对话框后面的整个屏幕变暗)。
    【解决方案2】:

    尝试创建一组新参数:

    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 方法完全没有记录,所以我不知道它是否像听起来那样。

    【讨论】:

    • 不,似乎不适用于“Theme.Translucent.NoTitleBar”
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        在上面的代码中...

        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 坐标。

        【讨论】:

          猜你喜欢
          • 2011-06-06
          • 1970-01-01
          • 2023-04-06
          • 2020-08-03
          • 1970-01-01
          • 2015-08-17
          • 1970-01-01
          • 2020-01-25
          • 1970-01-01
          相关资源
          最近更新 更多