2011-09-09 15 views
11

Sto provando a creare una finestra di dialogo personalizzata e il suo contenuto è centrato, ma finisce sempre allineato a sinistra. Ecco aboutdialog.xml:Come centrare il layout all'interno della finestra di dialogo Android?

<?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> 

E il mio codice (rilevante):

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

Che cosa mi manca qui? Grazie per l'assistenza.

Image: Screen shot of Dialog problem

+0

Questo è strano. Funziona bene per me. Puoi pubblicare uno screenshot? – inazaruk

+3

+1 per usare a: anziché Android: ovunque, come hai fatto? –

+0

Sì, anch'io ne controllo il corretto funzionamento. –

risposta

9

tenta di modificare a questo: a:layout_gravity="center_horizontal|center_vertical"
O
uso Relative_Layout e allineare il layout lineare, al centro di genitore con fill_parent per il parente wrap_content per lineare.

anche se è lavorato con me sul centro

+3

Il wrapping dell'intero XML in un RelativeLayout lo ha fatto. Il 'layout_width's per entrambi i * Layouts deve essere' fill_parent' ed entrambi 'layout_height's devono essere impostati su' wrap_content' (almeno è così che lo voglio). – Conrad

+0

Il layout relativo ha funzionato, grazie. –

+0

Ma il problema è figlio. ViewGroup in RelativeLayout deve avere layout_width = fill_parent per farlo funzionare e talvolta non si desidera questo comportamento per il contenuto. Vedere la mia soluzione qui sotto;) –

0

Stai facendo layout_gravity che è buono, ma dal momento che lo si fa per il layout più esterno, non può posizionarsi rispetto a ciò che è intorno ad esso.

Penso che avvolgendo il layout di cui sopra all'interno di un'altra disposizione avrebbe fatto

+0

Il wrapping dell'XML precedente in un altro LinearLayout non fa differenza. – Conrad

0

Puoi provare a cambiare la vostra layout_gravity LinearLayout ad appena gravità? Vedere la differenza spiegata qui: Gravity and layout_gravity on Android

+0

Non fa differenza. – Conrad

+0

Come impostare a: layout_gravity = "center" su ogni vista all'interno di LinearLayout? –

+0

lo ha già provato, ancora nessun dado. – Conrad

2

Modificare il ViewGroup (FrameLayout) della finestra di dialogo che contiene il layout del contenuto. Io uso il metodo statico e lo invoco dentro onActivityCreated() in 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); 
} 
Problemi correlati