web-dev-qa-db-fra.com

Changer la position du dialogue sur l'écran Android

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 ??

85
Leem.fin

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

191
Aleks G
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

21
Ramesh Solanki

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);
}
8
Wahib Ul Haq

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.

6
Md. Sajedul Karim

Nouveau BottomSheetDialog:

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

dialog.show();
5
mohamed murashid

ajoutez simplement ceci à votre code:

dialog.getWindow().setGravity(Gravity.BOTTOM);
3
Techashonline
dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM;
1
Hossein Mansouri

Pour mon activité de dialogue, j'ai utilisé celui-ci:

WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.gravity = Gravity.BOTTOM;
0
Andris
        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);
        }
    }
0
NickUnuchek

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;

}
0
Mue