在屏幕的任何位置显示AlertDialog

当我们在Android中显示AlertDialog时,它显示在屏幕的中心。 有什么方法可以改变立场?

经过各种search后,我find了解决办法。

代码如下所示:

private CharSequence[] items = {"Set as Ringtone", "Set as Alarm"}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { if(item == 0) { } else if(item == 1) { } else if(item == 2) { } } }); AlertDialog dialog = builder.create(); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes(); wmlp.gravity = Gravity.TOP | Gravity.LEFT; wmlp.x = 100; //x position wmlp.y = 100; //y position dialog.show(); 

这里x位置的值是从左到右的像素。 对于y的位置值是从下到上。

例如,如果您想将进度对话框向下移一点,而不是设置exakt像素位置,那么这就足够了:

 progressDialog.getWindow().getAttributes().verticalMargin = 0.2F; 

为了使设置来信息效果,我添加了下面的代码
dialog.getWindow().setAttributes(wmlp);

改变gypsicoder的答案wmlp的值,或wmlp的设置没有通过我的testing生效。

这些答案将移动AlertDialog的位置,但是,显示的对话框的位置也将包括对话框的填充。

如果你想摆脱这种填充(例如,将对话框放置在屏幕底部),则还需要在styles.xml中重写AlertDialog的默认样式,以将windowBackground设置为null,如下所示:

 <resources> <!-- Example app theme - mine uses the below --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:alertDialogTheme">@style/MyDialogTheme</item> </style> <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <!-- Full width --> <item name="android:layout_width">fill_parent</item> <!-- Null window background kills surrounding padding --> <item name="android:windowBackground">@null</item> <item name="android:windowNoTitle">true</item> </style> </resources> 

以及如接受的答案中所述设置Window.LayoutParameters。

对@David Caunt特别留言,他的回答是: 删除边框,从对话框填充完成此图片。