2013-08-05 15 views
89

Próbuję wyśrodkować ImageView wewnątrz poziomo i pionowo w poziomie, ale po prostu nie mogę tego zrobić. Głównym powodem, dla którego nie używam RelativeLayout jest to, ponieważ potrzebuję layout_weight (moja Activity składa się z czterech kolumn, które powinny być jednakowo podzielone, a także reagować na różne szerokości ekranu, przy czym każda kolumna ma centryczne i nie rozciągnięte kolumnę) .Jak wyśrodkować zawartość w układzie liniowym?

Oto mój xml do tej pory:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000" 
    android:baselineAligned="false" 
    android:gravity="center" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".Main" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_speak" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_speak" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_readtext" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_readtext" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_edit" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_edit" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_config" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_config" /> 
    </LinearLayout> 
</LinearLayout> 
+0

po zrzucie ekranu jak ty chcę i bieżący zrzut ekranu –

Odpowiedz

228

android:gravity obsługuje wyrównanie jej dzieci,

android:layout_gravity obsługuje wyrównanie samego siebie.

Więc użyj jednego z nich.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000" 
    android:baselineAligned="false" 
    android:gravity="center" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".Main" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:gravity="center" > 

     <ImageView 
      android:id="@+id/imageButton_speak" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_speak" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:gravity="center" > 

     <ImageView 
      android:id="@+id/imageButton_readtext" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_readtext" /> 
    </LinearLayout> 

    ... 
</LinearLayout> 

lub

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000" 
    android:baselineAligned="false" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".Main" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_speak" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_speak" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_readtext" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_readtext" /> 
    </LinearLayout> 

    ... 
</LinearLayout> 
+3

Dzięki, stary! Działało idealnie! – horta

+0

"android: layout_gravity dba o siebie." zmieni się, by powiedzieć, że grawitacja układu jest używana przez rodzica. – ataulm

25
android:layout_gravity is used for itSelf of layout 

użycie android:gravity="center" dla Childs twoich LinearLayout

więc kod powinien być

<LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_weight="1" > 
4

Próbowałem rozwiązania tutaj, ale mam problem i spróbować zmiany ja uwadze złego w layout_width musi być wrap_content jak ten

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_weight="1" > 
Powiązane problemy