2010-07-19 14 views
12

Ho creato una finestra di avviso personalizzata da visualizzare alla fine del gioco in modo che il giocatore possa inserire il suo nome per salvarlo. Il problema è quando chiamo show() nella finestra di dialogo appare ma non è centrato verticalmente! È un po 'più basso di quanto dovrebbe e non importa quali proprietà ho impostato in xml o quando si utilizza setGravity().Finestra di dialogo di avviso personalizzato non centrata verticalmente su Android

Penso che questo sia lo stesso problema di the one mentioned here, ma nessuno ha dato una risposta adeguata.

Grazie per il vostro aiuto.

Per maggiori dettagli, qui è il mio codice:

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(); 

E qui è il codice del primo elemento del layout XML di 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"> 

Ecco l'uscita screenshot: alt text http://the.niox.free.fr/divers/dialog_offset.png

risposta

0

impostare l'attributo su AlertDialog come android:gravity="center" o programmaticamente come setGravity(Gravity.CENTER). Questo Gravity è per il tuo layout solo non per la visualizzazione del tuo cellulare. se si usa il titolo personalizzato, il suo centro non sembra verticale.

+0

Ho provato tutto questo già e non funziona. Il mio file XML è in realtà la descrizione del contenuto della finestra di dialogo che infilo, è sbagliato? – NioX5199

+0

Non riesco a prenderti bene. Ma in qualsiasi modo il contenuto della vista non influisce sulla gravità. quindi per favore pubblica il tuo codice. ci proverò – Praveen

+0

@ NioX5199: puoi pubblicare lo screenshot dell'output? – Praveen

0

Non proprio una risposta, ma stavo avendo un problema simile. Sembra che sia centrato, ma suppone che AlerterDialog abbia un set di titoli. Nel mio caso, ho appena impostato un titolo.

3

Il bug è descritto here. Il AlertDialog sta riservando spazio per il pannello titolo/icona anche dove non c'è né un titolo né un'icona.

La soluzione è, penso, abbastanza semplice: dovrebbe impostare il layout del pannello superiore su GONE, proprio come fa per il pannello dei pulsanti in caso di assenza di pulsanti. Finché non è stato fatto, l'unica soluzione è implementare la propria sottoclasse Dialog.

+0

Pannello superiore? Come si imposta il layout del pannello superiore su andato? – ThePerson

2

È possibile utilizzare un'attività invece di un avviso personalizzato per questo. È necessario impostare il tema di attività di dialogo nel file manifest di Android:

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

e si può regolare il layout di attività XML secondo il vostro bisogno.

0

Puoi provare a utilizzare AlertDialog.Builder.setCustomTitle(View); anziché setView? Lo usiamo perché la finestra di avviso sembra un po 'meglio della finestra di dialogo con il titolo vuoto.

0

si dovrebbe utilizzare la seguente riga nel xml innanzitutto rimuovere quella linea di imbottitura dal XML e dopo che

android:layout_gravity="center" 

dopo questo apparirà il vostro dialogo nel centro e se si utilizza il margine da sinistra ecc di rimuovere tale e anche se si utilizza che

android:layout_width="fill_parent" 

di cambiarlo con la

android:layout_width="wrap_content" 

dopo che la finestra di dialogo verrà visualizzata al centro.

0

Prova:

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

Se si implementa la propria finestra la linea requestWindowFeature (Window.FEATURE_NO_TITLE) nasconde il pannello di titolo e la finestra di dialogo è centrata sullo schermo. Forse funziona anche con un AlertDialog.

1

android: theme = "@ Android: Stile/Theme.Dialog"

0

è necessario disabilitare il titolo della finestra. Innanzitutto creare uno stile personalizzato per la tua finestra (Assicurarsi di utilizzare il tema genitore che si adatta alle vostre esigenze):

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

Quindi applicare il vostro stile alla finestra di costruttore:

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(); 
Problemi correlati