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

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

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

必须有一种方法来显示一个对话窗口内的小东西,但它扩大到全屏幕的大小,而不是其内容的大小?

我find了解决办法:

在具有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); } 

调用setContentView() 之后调用Window.setLayout()是非常重要的,否则它将不起作用。

我只是想填充只有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:windowMinWidthMinor

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

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

对于对话这可能对某人有帮助。 我想要一个对话框来取得整个屏幕的宽度。 search了很多,但没有发现有用的。 最后这对我工作:

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

添加完后,我的对话框出现在屏幕的全angular。

把你的dialog_custom_layout.xml包装到RelativeLayout中,而不是其他任何布局。

在最上面的布局中设置最小宽度。

 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> 

Matthias的回答大部分都是正确的,但是仍然没有填满整个屏幕,因为每边都有一个小填充(由@Holmes指出)。 除了他的代码,我们可以通过扩展Theme.Dialog风格来解决这个问题,并添加一些像这样的属性。

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

然后,我们只需将主题设置为MyDialog声明活动:

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

对于那些使用“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); } 

在您的活动的风格,添加这些代码

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

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

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

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

就是这样,不需要调用方法程序。

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

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

没有行动吧

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