我有一个自定义样式的对话框,它使用我在XML文件中定义的布局。我希望这个对话框以纵向模式填充屏幕的宽度,但在横向模式下只能填充400dip。 MaxWidth似乎是实现这一目标的完美方式,但我无法弄清楚如何为对话框样式或XML布局指定MaxWidth。
答案 0 :(得分:3)
假设您使用名为layout/dialog_core.xml
的下一个布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="fill_parent" >
//All your dialog views go here....
</LinearLayout>
然后,您可以再创建两个文件:layout/dialog.xml
和layout-land/dialog.xml
。
layout/dialog.xml
文件不会限制宽度:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="fill_parent" >
<include layout="@layout.dialog_core.xml" />
</LinearLayout>
虽然您的layout-land/dialog.xml
应该有宽度限制:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:maxWidth="400dp" >
<include layout="@layout.dialog_core.xml" />
</LinearLayout>
当然,您现在需要在代码中使用R.layout.dialog
布局。
P.S。我仅将LinearLayout
用于示例目的。任何布局视图都可以。
答案 1 :(得分:0)
您可以在此处找到实际解决方案:setting a max width for my dialog
答案是使用对话框主题的活动,但考虑到它基于Window对象,它应该太复杂,无法使其适应对话框。
答案 2 :(得分:0)
我通过在显示对话框后更改对话框的窗口布局来实现BottomSheetDialog:
private int maxWidthDp = 600;
public void showDialog(Context context) {
BottomSheetDialog dialog = new BottomSheetDialog(context);
// set up the dialog...
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialogInterface) {
Configuration configuration = context.getResources().getConfiguration();
if (configuration.screenWidthDp > maxWidthDp) {
// ensure maximum dialog size
dialog.getWindow().setLayout(dpToPixels(maxWidthDp), -1);
}
}
});
dialog.show();
}
dpToPixels
是一个辅助函数,可将dp值转换为像素值,例如像这里https://stackoverflow.com/a/8399445/1396068
答案 3 :(得分:-3)
您是否尝试在自定义xml中设置android:minWidth
和android:minHeight