AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
d.show();
d.getWindow().setAttributes(lp);
int width = (int)(getResources().getDisplayMetrics().widthPixels*0.90);
int height = (int)(getResources().getDisplayMetrics().heightPixels*0.90);
alertDialog.getWindow().setLayout(width, height);
<style name="Theme.Holo.Dialog.NoActionBar.MinWidth">
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
</style>
<!-- The platform's desired minimum size for a dialog's width when it
is along the major axis (that is the screen is landscape). This may
be either a fraction or a dimension. -->
<item type="dimen" name="dialog_min_width_major">65%</item>
public static int getScreenWidth(Activity activity) {
Point size = new Point();
activity.getWindowManager().getDefaultDisplay().getSize(size);
return size.x;
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editSearch" />
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView"/>
<!-- this is a dummy view that will make sure the dialog is highest -->
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int wwidth = metrics.widthPixels;
为了获得屏幕尺寸
75
初始化对话框对象并设置内容视图后 . 这样做,享受 .
(如果我将宽度设置为90%,高度设置为70%,因为宽度为90%,它将位于工具栏上方)
DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = (int) ((int)displaymetrics.widthPixels * 0.9);
int height = (int) ((int)displaymetrics.heightPixels * 0.7);
d.getWindow().setLayout(width,height);
d.show();
final Dialog d = new Dialog(getActivity());
// d.getWindow().setBackgroundDrawable(R.color.action_bar_bg);
d.requestWindowFeature(Window.FEATURE_NO_TITLE);
d.setContentView(R.layout.dialog_box_shipment_detail);
WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); // for activity use context instead of getActivity()
Display display = wm.getDefaultDisplay(); // getting the screen size of device
Point size = new Point();
display.getSize(size);
int width = size.x - 20; // Set your heights
int height = size.y - 80; // set your widths
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = width;
lp.height = height;
d.getWindow().setAttributes(lp);
d.show();
-1
...
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
Dialog d = builder.create(); //create Dialog
d.show(); //first show
DisplayMetrics metrics = new DisplayMetrics(); //get metrics of screen
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = (int) (metrics.heightPixels*0.9); //set height to 90% of total
int width = (int) (metrics.widthPixels*0.9); //set width to 90% of total
d.getWindow().setLayout(width, height); //set layout
2
获取设备宽度:
public static int getWidth(Context context) {
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager windowmanager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.widthPixels;
}
Dialog mDialog;
View mDialogView;
...
// Get height
int height = mDialog.getWindow()
.getWindowManager().getDefaultDisplay()
.getHeight();
// Set your desired padding (here 90%)
int padding = height - (int)(height*0.9f);
// Apply it to the Dialog
mDialogView.setPadding(
// padding left
0,
// padding top (90%)
padding,
// padding right
0,
// padding bottom (90%)
padding);
24 回答
我的答案是基于koma的,但它不需要覆盖onStart,只需要onCreateView,在创建新片段时,默认情况下几乎总是覆盖它 .
我在Android 5.0.1上测试过它 .
根据Android平台开发人员Dianne Hackborn在this讨论组帖子中,Dialogs将他们Window的顶级布局宽度和高度设置为
WRAP_CONTENT
. 要使Dialog更大,可以将这些参数设置为MATCH_PARENT
.演示代码:
请注意,在显示对话框后设置属性 . 系统在设置时很挑剔 . (我猜布局引擎必须在第一次显示对话框时设置它们 . )
最好通过扩展Theme.Dialog来做到这一点,然后你不会让对话框自动采用适当的光明或黑暗主题或Honeycomb Holo主题 . 这可以根据http://developer.android.com/guide/topics/ui/themes.html#SelectATheme)完成
尝试将自定义对话框布局包装到
RelativeLayout
而不是LinearLayout
. 这对我有用 .像对方建议的那样在对话框窗口上指定FILL_PARENT对我来说不起作用(在Android 4.0.4上),因为它只是拉伸黑色对话框背景以填满整个屏幕 .
什么工作正常是使用最小显示值,但在代码中指定它,以便对话框占用屏幕的90% .
所以:
通常,在大多数情况下仅调整宽度应该是足够的 .
在自定义视图xml中设置
android:minWidth
和android:minHeight
. 这些可以强制警报不仅仅包装内容大小 . 使用这样的视图应该这样做:更简单就是这样做:
这里的所有其他答案都是有道理的,但它不符合Fabian的需求 . 这是我的解决方案 . 它可能不是完美的解决方案,但它适用于我 . 它显示一个全屏对话框,但您可以在顶部,底部,左侧或右侧指定填充 .
如你所见,我在那里 android:paddingTop= 20dp 基本上是你需要的 . android:windowBackground = @color/Black0Percent 只是我在color.xml上声明的颜色代码
该Color代码仅用作虚拟对象,用0%透明度颜色替换Dialog的默认窗口背景 .
最后,我们的对话框设置了使用dialog.xml的自定义视图:
Conclusion: 我试图在名为CustomDialog的styles.xml中覆盖对话框的主题 . 它会覆盖Dialog窗口布局,让我有机会设置填充并更改背景的不透明度 . 它可能不是完美的解决方案,但我希望它可以帮助你.. :)
您可以使用百分比(JUST)窗口对话框宽度 .
从Holo Theme看这个例子:
您需要做的就是扩展此主题并将“Major”和“Minor”的值更改为90%而不是65% .
问候 .
以下工作对我来说很好:
(注意:在前面的答案中建议的windowMinWidthMajor / Minor没有做到这一点 . 我的对话框根据内容不断改变大小)
然后:
实际90%计算的解决方案:
其中
getScreenWidth(Activity activity)
定义如下(最好放在Utils类中):那么,你必须先设置你的对话框的高度和宽度才能显示它(dialog.show())
所以,做这样的事情:
到目前为止我能想到的最简单的方式 -
如果您的对话框是由垂直LinearLayout制作的,只需添加一个“高度填充”虚拟视图,它将占据屏幕的整个高度 .
例如 -
注意LinearLayout属性中的
android:weightSum="1"
和虚拟视图属性中的android:layout_weight="1"
那么,你必须先设置你的对话框的高度和宽度才能显示它(dialog.show())
所以,做这样的事情:
获取此代码,我做了一些更改:
但是,当设备改变其位置时,对话框大小可能会改变 . 当指标发生变化时,您可能需要自己处理 . PD:peekDecorView,暗示活动中的布局已正确初始化,否则您可以使用
为了获得屏幕尺寸
初始化对话框对象并设置内容视图后 . 这样做,享受 .
(如果我将宽度设置为90%,高度设置为70%,因为宽度为90%,它将位于工具栏上方)
这是我的自定义对话框的变体宽度:
因此,取决于设备方向(
ThemeHelper.isPortrait(mContext)
)对话框's width will be either 95% (for portrait mode) or 65% (for landscape). It' s,作者要求的更多,但它可能对某人有用 .您需要创建一个从Dialog扩展的类,并将此代码放入
onCreate(Bundle savedInstanceState)
方法中 .对于对话框的高度,代码应与此类似 .
以上许多答案都很好,但没有一个对我有用 . 所以我把@nmr的答案结合起来得到了这个 .
获取设备宽度:
然后使用它来制作对话框90%的设备,
这是一个对我有用的简短答案(在API 8和API 19上测试过) .
您需要使用样式@ style.xml(如CustomDialog)来显示可自定义的对话框 .
并在Activity.java中使用此样式
你的custom_dialog.xml应该在你的布局目录中