如何获得一个Dialog样式活动窗口来填充屏幕?

Mat*_*ias 135 user-interface android dialog

我正在使用对话框主题集的活动,我希望它是全屏的.我尝试了各种各样的东西,甚至通过WindowManager手动将窗口扩展到全宽和高度,但没有任何作用.

显然,对话框窗口(或具有对话框主题的活动)将仅根据其内容进行扩展,但即使这样也不总是有效.例如,我显示了一个进度条圆,其宽度和高度设置为FILL_PARENT(其布局容器也是如此),但是,对话框仍然围绕着更小的进度条而不是填充屏幕.

必须有一种方法可以在对话框窗口中显示一些小的内容,但是在没有内容调整大小的情况下将其扩展到全屏大小?

Mat*_*ias 307

我找到了解决方案:

在具有Theme.Dialog样式集的活动中,执行以下操作:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.your_layout);

    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
Run Code Online (Sandbox Code Playgroud)

打电话Window.setLayout() 打电话很重要setContentView(),否则无效.

  • 现在不推荐使用FILL_PARENT,而是使用MATCH_PARENT (11认同)
  • 它是:`import android.view.ViewGroup.LayoutParams;` (6认同)
  • 谢谢,节省了我的时间,无处可去我想出来了!但任何想法为什么我们必须在代码中明确指定,为什么fill_parent不能通过xml用于主题对话框的活动? (5认同)
  • 它没有填满整个屏幕,就像每侧都有一个小填充物. (4认同)
  • 我的对话框不会填充宽度,不会填充XML,也不会填充此方法.我正在吃指甲. (3认同)
  • 我想要一个全屏宽度对话框,我使用**dialog.getWindow()**和**getWindow()**,但我的对话框仍然没有占据屏幕的整个宽度,仍然在屏幕后面显示从两侧(左侧) & 对).对话的任何解决方案? (2认同)

Ser*_*kyi 64

您可以将此值添加到您的样式android:windowMinWidthMajor和android:windowMinWidthMinor

<style name="Theme_Dialog" parent="android:Theme.Holo.Dialog">
    ...
    <item name="android:windowMinWidthMajor">97%</item>
    <item name="android:windowMinWidthMinor">97%</item>
</style>
Run Code Online (Sandbox Code Playgroud)

窗口允许的最小宽度,沿着屏幕的短轴.

  • 最简单的解决方案。它还与appcompat支持库一起使用。谢谢。 (2认同)

Pad*_*mar 52

我只是想填充80%的屏幕,因为我在下面这样做了

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        int screenWidth = (int) (metrics.widthPixels * 0.80);

        setContentView(R.layout.mylayout);

        getWindow().setLayout(screenWidth, LayoutParams.WRAP_CONTENT); //set below the setContentview
Run Code Online (Sandbox Code Playgroud)

它只有当我把getwindow().setLayout ...行放在setContentView(..)下面时才有效

谢谢@Matthias


Aya*_*yan 11

dialog_custom_layout.xml包装到RelativeLayout而不是任何其他布局.这对我有用.


Rah*_*rma 8

对于对话 这可能对某人有帮助.我想要一个对话框来占据整个屏幕宽度.搜索了很多,但没有发现有用.最后这对我有用:

mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);
Run Code Online (Sandbox Code Playgroud)

添加后,我的对话框显示在屏幕的整个宽度.


Hen*_*aWD 7

对于使用“Theme.AppCompat.Dialog”或任何其他“Theme.AppCompat.Dialog”后代(如“Theme.AppCompat.Light.Dialog”、“Theme.AppCompat.DayNight.Dialog”等)的人,此答案是一种解决方法。我自己必须使用 AppCompat 对话框,因为我使用 AppCompatActivity 作为我所有活动的扩展。如果我们使用接受的答案,将会出现一个问题,使对话框的每一边(顶部、右侧、底部和左侧)都有填充。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.your_layout);

    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
Run Code Online (Sandbox Code Playgroud)

在您的 Activity 样式中,添加这些代码

<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)

正如您可能注意到的,为我们的对话框生成填充的问题是“android:windowBackground”,所以在这里我将窗口背景设为空。