2010-08-03 20 views
14

Estoy tratando de crear un cuadro de diálogo personalizado en Android. Pero sea lo que sea que intenté hacer, no puedo cambiar el ancho del diálogo. Simplemente sigue siendo el mismo. La siguiente es la vista que estoy configurando como contenido para el diálogo.Crear un cuadro de diálogo personalizado en Android

<RelativeLayout 
android:id="@+id/current_stats" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:visibility="visible"> 
<ImageView android:id="@+id/player_image" 
    android:src="@drawable/person" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true"/> 
<TextView 
    android:id="@+id/player_name" 
    android:layout_below="@id/player_image" 
    android:layout_centerHorizontal="true" 
    android:text="Raja Ram" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
<ImageButton android:id="@+id/dialog_close" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:background="#00000000" 
    android:src="@drawable/close_button_selector"/> 
<ImageButton android:id="@+id/dialog_flip" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:background="#00000000" 
    android:src="@drawable/rotate"/> 
</RelativeLayout> 

Como puede ver, en todas partes estoy usando wrap_content en este ejemplo de código. También probé las siguientes opciones

1) Estableciendo un estilo personalizado al crear el cuadro de diálogo de esta manera.

dialog = new Dialog(this,R.style.Theme_Dialog); 

Y el estilo de la siguiente manera

<resources> 
<style name="Theme" parent="android:Theme"> 
</style> 
<style name="Theme.Dialog"> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
</style> 
</resources> 

2) Configuración de los parámetros de la vista en el onCreateDialog() como esto

LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
v = inflater.inflate(R.layout.player_info, null, false); 
ViewGroup.LayoutParams p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
dialog.setContentView(v,p); 

3) También probé a configurar la ventana parámetros como este en el método onCreateDialog()

WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
params.width=WindowManager.LayoutParams.WRAP_CONTENT; 
dialog.getWindow().setAttributes(params); 

Pero de nuevo no hubo suerte. ¿Puede alguien ayudarme con este problema? ¿¿Estoy haciendo algo mal?? También, ¿me pueden sugerir cómo configurar las posiciones x e y para la ventana de Diálogo?

Gracias

Respuesta

1

Descubrí el problema después de un largo tiempo. El problema fue con la forma en que usé el diseño relativo. Supongo que no he especificado la posición relativa correctamente. Cuando cambié eso al diseño lineal funcionó bien. No estaba usando toda la pantalla, sino solo lo que fuera necesario.

2

¿Su problema que se necesita todo el ancho de la pantalla, o que no puede controlar qué parte de la pantalla es que tomando?

Para que su actividad actuar como un cuadro de diálogo, y no ocupan al máximo con que puede establecer su actividad para tener el tema de diálogo en el manifiesto:

<activity android:theme="@android:style/Theme.Dialog"> 

El diálogo será tan grande como se requiere por su diseño. Si desea que sea más amplio, debe ampliar su diseño. (Ajuste el tamaño de las imágenes, agregue relleno, etc.).

No conozco una forma de posicionar la ventana de diálogo ... Creo que siempre está centrada, podría estar equivocado.

+0

Gracias por su respuesta. Mi problema es que lo quiero más como una ventana emergente. En lugar de usar todo el ancho de la pantalla, solo quiero que consuma solo el ancho requerido para mantener la vista. Y no estoy comenzando una actividad separada en ese diálogo. Estoy interesado en mostrar una ventana que permite al usuario realizar alguna acción y debe permitir algunas animaciones.Incluso probé PopupWindow, pero por alguna razón, mi animación personalizada no funcionaba con la ventana emergente. Espero haber aclarado mi requisito. ¿Tienes alguna sugerencia? – rajaramyadhav

+0

Una actividad temática de diálogo se verá como una ventana emergente. Esta pregunta muestra un ejemplo de cómo se vería: http://stackoverflow.com/questions/1967085/android-how-to-resize-dialog. –

0

pudiera cambiar la anchura, la altura y la posición del cuadro de diálogo con GetWindow(). SetAttributes (params)

31
 dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar); 

     dialog.setContentView(R.layout.custom_dialog); 

     LayoutParams lp=dialog.getWindow().getAttributes();  
     lp.x=100;lp.y=100;lp.width=100;lp.height=200;lp.gravity=Gravity.TOP | Gravity.LEFT; 
     lp.dimAmount=0;    
     lp.flags=LayoutParams.FLAG_LAYOUT_NO_LIMITS | LayoutParams.FLAG_NOT_TOUCH_MODAL; 
    // dialog.getWindow().setAttributes(lp); 

     dialog.show(); 

Esto funcionó bien para mí ....

+0

¡Técnica agradable! –

+0

Bueno.Gracias, me salvó el tiempo – Piraba

+0

Funcionó bien después de un pequeño ajuste para satisfacer mis necesidades +1 – user577732

-3

en el método onCreate() de su clase de diálogo personalizado hacer el siguiente

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
getWindow().setLayout(x, y); 
} 
Cuestiones relacionadas