2013-08-05 3 views
89

Я пытаюсь центрировать ImageView внутри LinearLayout по горизонтали и вертикали, но я просто не могу этого сделать. Основная причина, по которой я не использую RelativeLayout, потому что мне нужен layout_weight (мой Activity состоит из четырех столбцов, которые должны быть разделены поровну, а также реагировать на разные ширины экрана, причем каждый столбец имеет ImageView с центрированным и нерастянутым) ,Как центрировать содержимое внутри линейного макета?

Вот мой XML до сих пор:

<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

сообщению снимок экрана, как вы хочу и текущий скриншот –

ответ

228

android:gravity обрабатывает выравнивание его дети,

android:layout_gravity обрабатывает само выравнивание.

Так что используйте один из них.

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

или

<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

Спасибо, мужчина! Это сработало отлично! – horta

+0

"android: layout_gravity позаботится о себе". будет исправлено, чтобы сказать, что гравитация макета используется родителем. – ataulm

25
android:layout_gravity is used for itSelf of layout 

использование android:gravity="center" для Чайлдс из вашего LinearLayout

так что ваш код должен быть

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

Я попытался решения здесь, но у меня есть проблемы и попробовать некоторые изменения, которые я виду плохого в layout_width должен быть wrap_content как этот

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_weight="1" > 
Смежные вопросы