72

me hizo un simple AlertDialog en mi Actividad:Cambio de la posición del diálogo en la pantalla androide

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, los diálogo muestra en la (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 acciones superior? (¿Hay alguna forma de cambiar la gravedad o algo del diálogo?) Y ¿cómo hacerlo en función de mi código?

+0

Si usted nos muestra su diseño xml my_dialog probablemente podemos ayudarle a hacer cambios. ¿ –

+0

duplicado? Http: //stackoverflow.com/questions/5469005/show-alertdialog-in-any-position-of-the-screen –

+0

@ Ankit, ¿puede poner su comentario como respuesta, porque mi problema se resuelve después de comprobarlo? su enlace. –

Respuesta

171

He utilizado este código para mostrar el cuadro de 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 cuadro de diálogo, si lo necesita. Debería poder cambiar el parámetro de gravedad para mover el cuadro de diálogo sobre

+0

Hola, gracias. Establecí su gravedad en la parte superior, el diálogo va en la parte superior de la pantalla, pero también cubría mi barra de acción, me gustaría el diálogo en la parte superior, pero justo debajo de la barra de acción ... ¿cómo ajustar esto? –

+3

Puede intentar usar los campos 'wlp.x' y' wlp.y' para establecer explícitamente la ubicación del diálogo en la pantalla. No lo he probado yo mismo, pero probablemente debería funcionar. –

+0

Sí, wlp.x y wlp.y ​​están funcionando. –

20
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 usted de diálogo basado en la gravedad y de la disposición parámetros cambiar la gravedad y de los parámetros de diseño sobre la base de su requirenment

+0

Hola, gracias. Establecí su gravedad en la parte superior, el diálogo va en la parte superior de la pantalla, pero también cubría mi barra de acción, me gustaría el diálogo en la parte superior, pero justo debajo de la barra de acción ... ¿cómo ajustar esto? –

+2

puede establecer el margen superior del diseño –

+0

''FILL_PARENT'' está en desuso. Estoy en la API 21. Como por [Referencia del desarrollador] (https://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html) – fWd82

7

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

me encontré con este fragmento de código a partir del código @gypsicoder here

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í valor de x de la posición es píxeles de izquierda a derecha. Para el valor de posición y es de abajo hacia arriba.

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

Nueva BottomSheetDialog:

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

dialog.show(); 
2

sólo tiene que añadir esto a su código:

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