我正在使用一个带有对话框主题的活动,我想让它成为全屏幕。我尝试了各种方法,甚至通过WindowManager手动将窗口扩展到全宽度和全高度,但是都没有效果。
显然,对话框窗口(或具有对话框主题的活动)仅会根据其内容进行扩展,但即使如此也并不总是有效。例如,我显示了一个宽度和高度均设置为FILL_PARENT的进度条圆圈(所在布局容器也是),但仍然,对话框会围绕着小得多的进度条而不是填满整个屏幕。
必须有一种方法可以在对话框窗口内显示小物件,同时使它们扩展到全屏幕大小,而不改变它们的大小吗?
我正在使用一个带有对话框主题的活动,我想让它成为全屏幕。我尝试了各种方法,甚至通过WindowManager手动将窗口扩展到全宽度和全高度,但是都没有效果。
显然,对话框窗口(或具有对话框主题的活动)仅会根据其内容进行扩展,但即使如此也并不总是有效。例如,我显示了一个宽度和高度均设置为FILL_PARENT的进度条圆圈(所在布局容器也是),但仍然,对话框会围绕着小得多的进度条而不是填满整个屏幕。
必须有一种方法可以在对话框窗口内显示小物件,同时使它们扩展到全屏幕大小,而不改变它们的大小吗?
我找到了解决方案:
在你的Activity中,如果已经设置了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()
,否则它将无法起作用。
import android.view.ViewGroup.LayoutParams;
- user942821您可以将这些值添加到您的样式中: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>
我只想让屏幕填充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
将您的dialog_custom_layout.xml布局包装到RelativeLayout中,而不是其他任何布局。这对我有用。
对话框 这可能对某些人有帮助。 我想要一个对话框占据整个屏幕宽度。搜寻了很多但都没有找到有用的内容。最终我找到了以下方法:
mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);
对于使用"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”,因此我将窗口背景设置为空。
在最高层布局中设置最小宽度。
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:
<activity
android:name=".FooActivity"
android:theme="@style/MyDialog" />
这对像我这样的人很有帮助。创建自定义对话框样式:
<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"/>