在屏幕的任何位置显示AlertDialog

gyp*_*der 105 android android-ui android-layout

当我们在android中显示AlertDialog时,它显示在屏幕的中心.有没有办法改变立场?

gyp*_*der 248

在各种帖子中搜索后,我找到了解决方案.

代码发布如下:

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();
Run Code Online (Sandbox Code Playgroud)

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

  • 它有效,但我不得不添加:WMLP.gravity = Gravity.TOP | Gravity.LEFT; 否则,x和y值用作屏幕中心的偏移量. (15认同)
  • 您还可以创建自定义警报对话框。我最近才这样做,然后必须获得显示的宽度和高度,然后根据这些值的百分比设置 X 和 Y,这样布局就可以很好地缩放。http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog (2认同)

pgs*_*rom 14

例如,如果你想进一步向下移动progressdialog,而不是设置exakt像素位置,那么这就足够了:

progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
Run Code Online (Sandbox Code Playgroud)


jue*_*ang 5

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

在gypsicoder的答案中更改了wmlp的值,或者我的测试没有生效wmlp的设置.