在屏幕上更改对话框的位置

我在Activity中做了一个简单的AlertDialog

 View view = layoutInflater.inflate(R.layout.my_dialog, null); AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this) .setView(view) .create(); infoDialog.show(); 

使用上面的代码, 对话框显示在屏幕的中心(大约)。

我想知道,我如何自定义对话框的位置,使其显示在最上面的操作栏? (无论如何改变对话的重力或东西?),以及如何根据我的代码做到这一点?

我用这个代码来显示屏幕底部的对话框:

 Dialog dlg = <code to create custom dialog>; Window window = dlg.getWindow(); WindowManager.LayoutParams wlp = window.getAttributes(); wlp.gravity = Gravity.BOTTOM; wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; window.setAttributes(wlp); 

如果你需要的话,这段代码还可以防止android调暗对话框的背景。 你应该能够改变重力参数来移动对话框

 private void showPictureialog() { final Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar); // Setting dialogview Window window = dialog.getWindow(); window.setGravity(Gravity.CENTER); window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); dialog.setTitle(null); dialog.setContentView(R.layout.selectpic_dialog); dialog.setCancelable(true); dialog.show(); } 

您可以基于重力和布局参数根据您的需求自定义对话框,更改重力和布局参数

对我来说,这个工作得非常好,我试图把我的对话框放在textview底部的某个地方。

 public void setPosition(int yValue) { Window window = getWindow(); WindowManager.LayoutParams param = window.getAttributes(); param.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; param.y = yValue; window.setAttributes(param); window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); } 

我在这里find了@gypsicoder代码中的这段代码

 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的位置值是从下到上。

新的BottomSheetDialog

 BottomSheetDialog dialog = new BottomSheetDialog(YourActivity.this); dialog.setContentView(YourView); dialog.show(); 
 dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM; 

只需将其添加到您的代码:

 dialog.getWindow().setGravity(Gravity.BOTTOM);