J'ai créé une 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 dialogueapparaît au centre de l'écran.
Je me demande comment puis-je personnaliser la position de la boîte de dialogue pour l'afficher juste sous la barre d'actions supérieure? (Est-il possible de changer la gravité ou quelque chose du dialogue?) Et comment faire en fonction de mon code ??
J'ai utilisé ce code pour afficher la boîte de dialogue en bas de l'écran:
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);
Ce code empêche également Android de réduire l’arrière-plan de la boîte de dialogue, si vous en avez besoin. Vous devriez pouvoir changer le paramètre de gravité pour déplacer la boîte de dialogue
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 dialogue en fonction des paramètres de gravité et de mise en page modifier les paramètres de gravité et de mise en page en fonction de vos besoins
En ce qui me concerne, cela a plutôt bien fonctionné. J'essayais de positionner mon dialogue exactement au bas de la vue de texte, là où il est sélectionné.
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);
}
J'ai trouvé cet extrait de code de @gypsicoder code 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().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.x = 100; //x position
wmlp.y = 100; //y position
dialog.show();
Ici, la valeur de x position est exprimée en pixels de gauche à droite. Pour la position y, la valeur 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().getAttributes().gravity = Gravity.BOTTOM;
Pour mon activité de dialogue, j'ai utilisé celui-ci:
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.gravity = Gravity.BOTTOM;
public class MyDialogFragment extends DialogFragment{
protected void setDialogGravity(int gravity) {
Dialog dialog = getDialog();
if (dialog != null) {
Window window = dialog.getWindow();
if (window != null) {
WindowManager.LayoutParams params = window.getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
params.horizontalMargin = 0;
params.gravity = gravity;
params.dimAmount = 0;
params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
window.setAttributes(params);
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater,container,savedInstanceState);
return inflater.inflate(R.layout.my_dialog, null);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setDialogGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
}
}
j'utilise cette méthode
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
Window window = dialog.getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.BOTTOM;
dialog.setContentView(R.layout.dialog_droppoint);
dialog.show();
window.setAttributes(wlp);
return dialog;
}