我正在使用一个设置了对话框主题的活动,并且希望它是全屏的。我尝试了各种方法,甚至通过WindowManager手动将窗口扩展到全宽和全高,但没有任何效果。
显然,对话框窗口(或具有对话框主题的活动)将仅根据其内容展开,但即使这样也不总是有效。例如,我显示了一个进度条圆圈,其宽度和高度设置为FILL_PARENT(布局容器也是如此),但是对话框仍然环绕着较小的进度条,而不是填充屏幕。
必须有一种方法可以在对话框窗口中显示一些较小的内容,但是否可以将其扩展到全屏大小而又不调整其内容大小?
我正在使用一个设置了对话框主题的活动,并且希望它是全屏的。我尝试了各种方法,甚至通过WindowManager手动将窗口扩展到全宽和全高,但没有任何效果。
显然,对话框窗口(或具有对话框主题的活动)将仅根据其内容展开,但即使这样也不总是有效。例如,我显示了一个进度条圆圈,其宽度和高度设置为FILL_PARENT(布局容器也是如此),但是对话框仍然环绕着较小的进度条,而不是填充屏幕。
必须有一种方法可以在对话框窗口中显示一些较小的内容,但是否可以将其扩展到全屏大小而又不调整其内容大小?
Answers:
我找到了解决方案:
在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: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>
然后我们简单地声明Activity为主题MyDialog
:
<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"/>
仅此而已,无需以编程方式调用方法。