2012-07-23 3 views
35

Cuando uso en la disposición, que especifica este diálogo android:layout_width="match_parent" consigo este diálogo:Cómo crear diálogo que será completa en dimensión horizontal

small dialog

necesito de diálogo que será más amplia. ¿Algunas ideas?

+0

publicar su código diseño xml y tratar de llenar de valores padre en lugar de encuentro de los padres – rajpara

+2

@ rajpara 'fill_parent' y' match_parent' do * exactamente * lo mismo (ambos son constantes de valor '-1') – Eborbob

Respuesta

120

Puede hacerlo cogiendo el objeto Window que utiliza el cuadro de diálogo y restableciendo el ancho. Aquí hay un ejemplo simple:

//show the dialog first 
AlertDialog dialog = new AlertDialog.Builder(this) 
     .setTitle("Test Dialog") 
     .setMessage("This should expand to the full width") 
     .show(); 
//Grab the window of the dialog, and change the width 
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
Window window = dialog.getWindow(); 
lp.copyFrom(window.getAttributes()); 
//This makes the dialog take up the full width 
lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
lp.height = WindowManager.LayoutParams.WRAP_CONTENT; 
window.setAttributes(lp); 

Aquí está el resultado final. Tenga en cuenta que hay mucho más estilo que puede hacer en el diálogo si necesita ajustar las cosas (como cambiar el fondo, etc.). Cuando tuve que hacer esto en el pasado, suelo usar este método y personalizar el diseño utilizado en el diálogo con setView() en la clase del constructor.

example

+2

Solo tenga en cuenta que esto podría verse trange en una pantalla grande, como una tableta, por ejemplo. – wsanville

+1

¿Qué pasa si mi clase extiende la aplicación y quiero llamar alertdialog en eso? – ManishSB

+1

Si usa un DialogFragment, la configuración debe realizarse en el método 'onStart', consulte http://stackoverflow.com/questions/23990726/how-to-make-dialogfragment-width-to-fill-parent/26207535 – Eborbob

3

Otra forma de solucionar este problema es utilizar:

import android.support.v7.app.AlertDialog; 

en lugar de:

import android.app.AlertDialog; 
+0

La solución más simple, rápida y mejor. Esta debería ser la respuesta aceptada. – PerracoLabs

Cuestiones relacionadas