2010-07-19 9 views
12

Hice un cuadro de diálogo de alerta personalizado que se mostrará al final de mi juego para que el jugador pueda ingresar su nombre para guardarlo. El problema es cuando llamo al show() en el cuadro de diálogo pero no está centrado verticalmente. Es un poco más bajo de lo que debería y no importa qué propiedades establezca en el xml o cuando use setGravity().Diálogo de alerta personalizado no centrado verticalmente en Android

Creo que este es el mismo problema que the one mentioned here, pero nadie dio una respuesta adecuada.

Gracias por su ayuda.

Para más detalles, aquí es mi código:

AlertDialog.Builder builder; 

    LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.newrecord,(ViewGroup)findViewById(R.layout.shoot)); 

    builder = new AlertDialog.Builder(this); 
    builder.setView(layout); 

    newRecDialog = builder.create(); 

Y aquí es el código del primer elemento de la disposición XML de newrecord.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:gravity="center" 
android:padding="10dp" 
android:baselineAligned="true"> 

Aquí está la pantalla de salida: alt text http://the.niox.free.fr/divers/dialog_offset.png

Respuesta

0

establezca el atributo en su AlertDialog como android:gravity="center" o programáticamente como setGravity(Gravity.CENTER). Esta gravedad es solo para su diseño, no para la pantalla de su móvil. si usa Título personalizado, no se ve como centro vertical.

+0

Probé todo esto ya y no funciona Mi archivo XML es en realidad la descripción del contenido del cuadro de diálogo que infló, ¿es esto incorrecto? – NioX5199

+0

No puedo obtenerlo correctamente. Pero de cualquier forma, el contenido de la vista no afecta la gravedad. así que publique su código. Debería intentar. – Praveen

+0

@ NioX5199: ¿puedes publicar la captura de pantalla de tu salida? – Praveen

0

Realmente no fue una respuesta, pero estaba teniendo un problema similar. Parece que está centrado, pero supone que AlerterDialog tiene un conjunto de títulos. En mi caso, acabo de establecer un título.

3

El error se describe here. El AlertDialog está reservando espacio para el panel de título/icono incluso donde no hay ni un título ni un icono.

La solución es, creo, bastante simple: debe establecer el diseño del panel superior en GONE, al igual que lo hace para el panel de botones en caso de que no haya botones. Hasta que no se haga eso, la única solución es implementar su propia subclase Dialog.

+0

Panel superior? ¿Cómo se configura el diseño del panel superior? – ThePerson

2

Puede usar una actividad en lugar de una alerta personalizada para esto. Usted tiene que fijar el tema de la actividad como de diálogo en el archivo de manifiesto de Android:

android:theme="@android:style/Theme.Dialog" 

Y se puede ajustar la disposición actividad xml según su necesidad.

0

¿Puedes intentar usar AlertDialog.Builder.setCustomTitle(View); en lugar de setView? Lo usamos porque el diálogo de alerta se ve un poco mejor que el diálogo con título vacío.

0

Se debe utilizar la siguiente línea en el xml en primer lugar, eliminar esa línea de relleno de su xml y después de eso

android:layout_gravity="center" 

después de esto el diálogo aparecerá en el centro y si está utilizando el margen de izquierda, etc. que quitar eso y también si está utilizando que

android:layout_width="fill_parent" 

que la cambie con el

android:layout_width="wrap_content" 

después de eso su diálogo aparecerá en el centro.

0

Probar:

newRecDialog.getWindow().getAttributes().gravity = Gravity.CENTER; 
2

Si implementa su propio diálogo de la línea de requestWindowFeature (Window.FEATURE_NO_TITLE) oculta el panel de título y el diálogo se centra en la pantalla. Tal vez también funcione con AlertDialog.

1

android: theme = "@ android: estilo/Theme.Dialog"

0

es necesario deshabilitar el título de la ventana. En primer lugar crear un estilo personalizado para su diálogo (Asegúrese de utilizar el tema principal que se adapte a sus necesidades):

<style name="CustomDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowNoTitle">true</item> 
</style> 

A continuación, aplicar su estilo al constructor de diálogo:

AlertDialog.Builder builder; 

LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE); 
View layout = inflater.inflate(R.layout.newrecord,(ViewGroup)findViewById(R.layout.shoot)); 

builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.CustomDialog)); 
builder.setView(layout); 

newRecDialog = builder.create(); 
Cuestiones relacionadas