2011-09-09 14 views
11

Próbuję utworzyć niestandardowy dialogowym, a jej zawartość mają skupione, ale zawsze kończy się po lewej wyrównane. Oto aboutdialog.xml:Jak wyśrodkować układ wewnątrz okna dialogowego 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> 

A moja (istotne) Kod:

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

Co ja tu brakuje? Dzięki za pomoc.

Obrazek: Screen shot of Dialog problem

+0

To dziwne. Działa to dobrze dla mnie. Czy możesz opublikować zrzut ekranu? – inazaruk

+3

+1 za używanie: zamiast androida: wszędzie, jak to zrobiłeś? –

+0

Tak, ja też sprawdzam, czy działa dobrze. –

Odpowiedz

9

próbie edycji to: a:layout_gravity="center_horizontal|center_vertical"
LUB
użytku Relative_Layout i wyrównać układ liniowy do centrum rodzica z fill_parent względnego wrap_content dla Linear.

chociaż pracował ze mną w środku

+3

Zrobiłem to, pakując cały XML w RelativeLayout. W 'layout_width's dla obu układów * musi być' fill_parent' i obie 'layout_height's muszą być ustawione na' wrap_content' (przynajmniej tak jak chcę go). – Conrad

+0

Względny układ załatwił sprawę, dziękuję. –

+0

Ale problem jest ViewGroup dziecko w RelativeLayout musi mieć layout_width = fill_parent aby pracować i kiedyś ty nie chcesz to zachowanie dla treści. Zobacz moje rozwiązanie poniżej;) –

0

Robisz layout_gravity co jest dobre, ale ponieważ robisz to napotykanym układ, nie może ustawić się w stosunku do tego, co się wokół niego.

myślę, że owijanie powyższy układ wewnątrz innego układu zrobi to

+0

Owijanie powyżej XML w innym LinearLayout nie robi różnicy. – Conrad

0

można spróbować zmienić swój LinearLayout layout_gravity tylko grawitacja? Zobacz różnicę wyjaśnione tutaj: Gravity and layout_gravity on Android

+0

Nie ma znaczenia. – Conrad

+0

Co powiesz na ustawienie: layout_gravity = "center" na każdym widoku w swoim LinearLayout? –

+0

próbowałem już - nadal nie ma kości. – Conrad

2

Zmodyfikuj Dialogu ViewGroup (FrameLayout), który posiada układ treści. Używam metody statycznej i wywołuję ją wewnątrz onActivityCreated() w 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); 
} 
Powiązane problemy