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

时间:2009-09-01 14:13:28

标签: android user-interface dialog

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

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

必须有一种方法可以在对话框窗口中显示一些小内容,但是如果没有调整内容大小,它会扩展到全屏大小吗?

9 个答案:

答案 0 :(得分:305)

我找到了解决方案:

在您设置了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);
}

在致电Window.setLayout()后致电setContentView() 非常重要,否则无法使用。

答案 1 :(得分:56)

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

<style name="Theme_Dialog" parent="android:Theme.Holo.Dialog">
    ...
    <item name="android:windowMinWidthMajor">96%</item>
    <item name="android:windowMinWidthMinor">96%</item>
</style>

允许窗口沿屏幕辅助轴的最小宽度。

答案 2 :(得分:50)

我只想填写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

只有当我把getwindow()。setLayout ...行放在setContentView(..)

下面时它才有效

感谢@Matthias

答案 3 :(得分:10)

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

答案 4 :(得分:8)

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

mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);

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

答案 5 :(得分:2)

在最顶部的布局中设置最小宽度。

android:minWidth="300dp"

例如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="300dp">

<!-- Put remaining contents here -->

</LinearLayout>

答案 6 :(得分:2)

对于那些使用&#34; Theme.AppCompat.Dialog&#34;的人,这个答案是的解决方法。或任何其他&#34; Theme.AppCompat.Dialog&#34;后代喜欢&#34; Theme.AppCompat.Light.Dialog&#34;,&#34; Theme.AppCompat.DayNight.Dialog&#34;等 我自己必须使用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);
}

根据您的活动样式,添加这些代码

<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@null</item>
</style>

正如您可能注意到的那样,在我们的对话框中生成填充的问题是&#34; android:windowBackground&#34;,所以这里我将窗口背景设为null。

答案 7 :(得分:1)

这对像我这样的人有帮助。创建自定义对话框样式:

<style name="MyDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

在想要活动的AndroidManifest.xml文件集主题中:

<activity
        android:name=".CustomDialog"
        ...
        android:theme="@style/MyDialog"/>

这就是全部,无需调用programaticaly方法。

答案 8 :(得分:0)

在您的活动定义的清单文件中

<activity
        android:name=".YourPopUpActivity"
        android:theme="@android:style/Theme.Holo.Dialog" >
    </activity>

没有操作栏

<activity android:name=".YourPopUpActivity"
            android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"/>