wake-up-neo.net

Ändern der Position des Dialogs auf dem Android-Bildschirm

Ich habe eine einfache AlertDialog in meiner Aktivität gemacht :

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

infoDialog.show();

Mit obigem Code wird der Dialog in der (etwa) der Mitte des Bildschirms angezeigt. 

Ich frage mich, wie ich die Position des Dialogfelds anpassen kann, damit es direkt unter der oberen Aktionsleiste angezeigt wird. (Gibt es sowieso die Schwerkraft oder etwas des Dialogs zu ändern?) Und wie mache ich das basierend auf meinem Code?

85
Leem.fin

Ich habe diesen Code verwendet, um den Dialog am unteren Bildschirmrand anzuzeigen:

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

Dieser Code verhindert auch, dass Android den Hintergrund des Dialogs bei Bedarf dimmt. Sie sollten in der Lage sein, den Gravitationsparameter zu ändern, um den Dialog zu verschieben

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

sie können Ihren Dialog basierend auf Schwerkraft- und Layoutparametern anpassen Ändern Sie Schwerkraft- und Layoutparameter basierend auf Ihren Anforderungen

21
Ramesh Solanki

Für mich hat das ziemlich gut geklappt, wo ich versuchte, meinen Dialog genau unterhalb der Textansicht zu positionieren, wo er ausgewählt wurde.

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

Ich habe dieses Code-Snippet aus @gypsicoder code hier gefunden.

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

Der Wert der x-Position ist Pixel von links nach rechts. Für y ist der Positionswert von unten nach oben.

6

Neue BottomSheetDialog:

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

dialog.show();
5

fügen Sie dies einfach in Ihren Code ein:

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

Für meine Dialogaktivität habe ich diese verwendet:

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

ich benutze diese Methode

 @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