我如何获得一个对话框样式的活动窗口来填充屏幕?
我正在使用对话框主题设置的活动,我希望它是全屏。 我尝试了各种各样的东西,甚至通过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"/>