Pregunta Cambio de posición del cuadro de diálogo en la pantalla de Android


Hice un simple AlertDialog en mi Actividad:

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

infoDialog.show();

Con el código anterior, el diálogo muestra en (sobre) el centro de la pantalla.

Me pregunto, ¿cómo puedo personalizar la posición del diálogo para que se muestre justo debajo de la barra de acción superior? (¿Hay alguna forma de cambiar la gravedad o algo del diálogo?) Y ¿cómo hacerlo en función de mi código?


75
2018-02-27 14:52


origen


Respuestas:


Usé este código para mostrar el diálogo en la parte inferior de la pantalla:

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

Este código también evita que Android atenúe el fondo del diálogo, si lo necesita. Debería poder cambiar el parámetro de gravedad para mover el diálogo sobre


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

puede personalizar su diálogo en función de la gravedad y los parámetros de diseño cambie la gravedad y el parámetro de diseño en función de su requerimiento


21
2018-02-27 14:57



Para mí, esto funcionó bastante bien cuando intentaba colocar mi cuadro de diálogo en algún lugar exactamente en la parte inferior de la vista de texto donde se selecciona.

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



Encontré este fragmento de código del código @gypsicoder aquí

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

Aquí el valor de la posición x es píxeles de izquierda a derecha. Para el valor de posición y es de abajo hacia arriba.


6
2018-06-11 23:00



Nuevo BottomSheetDialog:

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

dialog.show();

4
2017-08-02 14:21



solo agrega esto a tu código:

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

3
2017-10-16 07:00



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

1
2017-07-04 06:31