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

我使用的活动与对话框主题设置,我希望它是全屏幕。我尝试了各种各样的方法,甚至通过 WindowManager 手动将窗口扩展到全宽和全高,但都没有用。

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

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

104955 次浏览

我找到了解决办法:

在你设置了 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(),否则它不会工作。

在大多数布局的顶部设置最小宽度。

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>

我只是想填补只有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

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

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

马提亚斯的回答大部分是正确的,但是它仍然没有填满整个屏幕,因为它的两边都有一个小的填充物(@Holmes 指出)。除了他的代码,我们还可以通过扩展 Theme 来修复这个问题。对话框样式并添加一些属性,如下所示。

<style name="MyDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
</style>

然后我们简单地声明 Activity,主题设置为 MyDialog:

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

对话 这可能对某人有帮助。 我想要一个对话框采取全屏幕宽度。搜索了很多,但没有找到有用的。最终,这对我奏效了:

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

在添加了这个之后,我的对话框将显示在屏幕的全宽中。

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

<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"/>

就是这样,不需要以编程方式调用方法。

这个答案是一个变通的 对于那些使用“ Theme. AppCompat. Dialog”或任何其他“ Theme. AppCompat. 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);
}

在 Activity 的样式中,添加以下代码

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

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

把你的 对话框 _ 自定义 _ 布局. xml包装成 相对布局而不是其他布局。这对我来说很有效。

在定义我们的活动的清单文件中

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

没有动作酒吧

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