Frage Ändern der Position des Dialogs auf dem Bildschirm Android


Ich habe ein einfaches gemacht AlertDialog in meinem Aktivität:

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

infoDialog.show();

Mit dem obigen Code, der Dialog zeigt auf der (etwa) der Mitte des Bildschirms.

Ich frage mich, wie kann ich die Dialogposition so anpassen, dass sie direkt unter der obersten Aktionsleiste angezeigt wird? (Gibt es da eh die gravitation oder sowas des dialogs zu ändern?) Und wie geht das nach meinem code ??


75
2018-02-27 14:52


Ursprung


Antworten:


Ich habe diesen Code verwendet, um den Dialog unten auf dem Bildschirm 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 Schwerkraftparameter zu ändern, um den Dialog zu verschieben


176
2018-02-27 14:59



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 Layout-Parametern anpassen Ändern Sie die Schwerkraft- und Layoutparameter auf der Grundlage Ihrer Anforderungen


21
2018-02-27 14:57



Für mich hat das ziemlich gut geklappt, wo ich versucht habe, meinen Dialog irgendwo genau am Ende der Textansicht zu positionieren, wo er ausgewählt wird.

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

7
2018-06-30 10:57



Ich habe dieses Code-Snippet aus dem @gypsicoder-Code gefunden Hier

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

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


6
2018-06-11 23:00



Neu BottomSheetDialog:

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

dialog.show();

4
2017-08-02 14:21



Füge das einfach zu deinem Code hinzu:

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

3
2017-10-16 07:00



dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM;

1
2017-07-04 06:31