Как центрировать контент внутри линейного макета?

Я пытаюсь LinearLayout 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> 

Solutions Collecting From Web of "Как центрировать контент внутри линейного макета?"

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> 
 android:layout_gravity is used for itSelf of layout 

LinearLayout android:gravity="center" для детей вашего LinearLayout

Поэтому ваш код должен быть

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

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

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