2011-09-09 8 views
11

Estoy tratando de crear un cuadro de diálogo personalizado, y tener su contenido centrado, pero siempre termina alineado a la izquierda. Aquí es aboutdialog.xml:¿Cómo centrar el diseño dentro de Android Dialog?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:a="http://schemas.android.com/apk/res/android" 
    a:orientation="vertical" 
    a:id="@+id/AboutDialogLayout" 
    a:layout_width="fill_parent" 
    a:layout_height="fill_parent" 
    a:layout_gravity="center_horizontal" 
    a:gravity="center_horizontal"> 

    <ImageView a:id="@+id/imageView1" 
       a:src="@drawable/pricebook" 
       a:layout_height="wrap_content" 
       a:layout_width="wrap_content"/> 
    <TextView a:layout_height="wrap_content"   
       a:textAppearance="?android:attr/textAppearanceLarge" 
       a:id="@+id/textView1" 
       a:text="Price Book" 
       a:layout_width="wrap_content"/> 
    <TextView a:layout_height="wrap_content" 
       a:id="@+id/textView2" 
       a:layout_width="wrap_content" 
       a:text="foo"/> 
</LinearLayout> 

Y mi (relevante) Código:

Dialog d = new Dialog(this); 
d.setContentView(R.layout.aboutdialog); 
d.setTitle(R.string.app_name); 

Qué me estoy perdiendo aquí? Gracias por la asistencia.

Image: Screen shot of Dialog problem

+0

Eso es raro. Funciona bien para mí. ¿Puedes publicar una captura de pantalla? – inazaruk

+3

+1 por usar a: en lugar de Android: en todas partes, ¿cómo lo hiciste? –

+0

Sí, yo también compruebo que está funcionando bien. –

Respuesta

9

intenta editar a esto: a:layout_gravity="center_horizontal|center_vertical"
O
uso Relative_Layout y alinear la disposición lineal de centro de matriz con fill_parent de relativa wrap_content para Linear.

aunque se trabajó conmigo en el centro

+3

Envolviendo todo el XML en un RelativeLayout lo hizo. El 'layout_width's para ambos * Layouts necesita ser' fill_parent' y ambos 'layout_height's deben establecerse en' wrap_content' (al menos así es como lo quiero). – Conrad

+0

Distribución relativa hizo el truco, gracias. –

+0

Pero el problema es que el Grupo de Vista hijo en RelativeLayout debe tener layout_width = fill_parent para que funcione y en algún momento no quiere ese comportamiento para su contenido. Ver mi solución a continuación;) –

0

Estás haciendo layout_gravity lo cual es bueno, pero ya que lo hace a la disposición más exterior, no puede posicionarse con respecto a lo que hay a su alrededor.

Creo que si se envuelve la disposición anterior dentro de otro diseño haría

+0

Envolver el XML anterior en otro LinearLayout no hace la diferencia. – Conrad

0

Puede usted trate de cambiar su layout_gravity LinearLayout a poco la gravedad? Vea la diferencia explicada aquí: Gravity and layout_gravity on Android

+0

No hace la diferencia. – Conrad

+0

¿Qué le parece establecer un: layout_gravity = "center" en cada vista dentro de su LinearLayout? –

+0

intenté eso ya, todavía no hay dados. – Conrad

2

Modifique el ViewGroup (FrameLayout) del cuadro de diálogo que contiene su diseño de contenido. Yo uso el método estático y lo invoco dentro onActivityCreated() en DialogFragments:

/** 
* Center dialog content inside available space 
* @param dialog 
*/ 
public static void centerDialogContent(Dialog dialog) { 
ViewGroup decorView = (ViewGroup) dialog.getWindow().getDecorView(); 
View content = decorView.getChildAt(0); 
FrameLayout.LayoutParams contentParams = (FrameLayout.LayoutParams)content.getLayoutParams(); 
contentParams.gravity = Gravity.CENTER; 
content.setLayoutParams(contentParams); 
} 
Cuestiones relacionadas