Changer la position du dialog sur l’écran Android

J’ai fait un simple AlertDialog dans mon activité :

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

Avec le code ci-dessus, la boîte de dialog affiche le (environ) centre de l’écran.

Je me demande comment personnaliser la position de la boîte de dialog pour la faire apparaître juste sous la barre d’action supérieure? (Y a-t-il un moyen de changer la gravité ou quelque chose du dialog?) Et comment le faire en fonction de mon code?

J’ai utilisé ce code pour afficher la boîte de dialog en bas de l’écran:

 Dialog dlg = ; Window window = dlg.getWindow(); WindowManager.LayoutParams wlp = window.getAtsortingbutes(); wlp.gravity = Gravity.BOTTOM; wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; window.setAtsortingbutes(wlp); 

Ce code empêche également Android d'atténuer l'arrière-plan de la boîte de dialog, si vous en avez besoin. Vous devriez pouvoir changer le paramètre de gravité pour déplacer la boîte de dialog à propos de

 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(); } 

vous pouvez personnaliser votre boîte de dialog en fonction des parameters de gravité et de mise en page, modifier la gravité et le paramètre de disposition en fonction de vos besoins

Pour moi, cela a très bien fonctionné là où j’essayais de placer mon dialog quelque part exactement au bas de la vue de texte où il est sélectionné.

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

J’ai trouvé cet extrait de code du code @gypsicoder ici

 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().getAtsortingbutes(); wmlp.gravity = Gravity.TOP | Gravity.LEFT; wmlp.x = 100; //x position wmlp.y = 100; //y position dialog.show(); 

La valeur de la position x correspond aux pixels de gauche à droite. Pour y la valeur de la position est de bas en haut.

Nouveau BottomSheetDialog :

 BottomSheetDialog dialog = new BottomSheetDialog(YourActivity.this); dialog.setContentView(YourView); dialog.show(); 

ajoutez simplement ceci à votre code:

 dialog.getWindow().setGravity(Gravity.BOTTOM); 
 dialog.getWindow().getAtsortingbutes().gravity = Gravity.BOTTOM;