Как выровнять LinearLayout в центре его родителя? - PullRequest
71 голосов
/ 18 ноября 2011

Я просмотрел множество подобных вопросов здесь, в SO, но ничего не помогает. У меня есть иерархия различных вложенных макетов, у всех есть android:layout_width="fill_parent", а у самого внутреннего макета есть android:layout_width="wrap_content - мне нужно выровнять его по центру (по горизонтали). Как мне это сделать?

Обновление: : Я нашел причину проблемы - если я помещаю внутренний LinearLayout в RelativeLayout с android:layout_width="fill_parent", он все равно оборачивает его содержимое. Однако TableRow действительно заполняет экран.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
        <TableLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
            <TableRow >
            <LinearLayout 
            android:orientation="horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
                    <TextView
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:text="1"
                    android:textAppearance="?android:attr/textAppearanceLarge" />

                     <TextView
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:text="2"
                    android:textAppearance="?android:attr/textAppearanceLarge" />
             </LinearLayout>
           </TableRow>
        </TableLayout>
    </FrameLayout>
</LinearLayout>

Ответы [ 14 ]

1 голос
/ 18 ноября 2011

@ jksschneider - почти правильно. Убедитесь, что вы не установили gravity для родительского макета, а затем установите layout_gravity="center" для своего представления или макета.

0 голосов
/ 06 февраля 2019

Ниже приведен код для размещения Linearlayout внизу и размещения его содержимого в центре. Вы должны использовать RelativeLayout, чтобы установить Layout внизу.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#97611F"
    android:gravity="center_horizontal"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:text="View Saved Searches"
        android:textSize="15dp"
        android:textColor="#fff"
        android:gravity="center_vertical"
        android:visibility="visible" />
    <TextView
        android:layout_width="30dp"
        android:layout_height="24dp"
        android:text="12"
        android:textSize="12dp"
        android:textColor="#fff"
        android:gravity="center_horizontal"
        android:padding="1dp"
        android:visibility="visible" />
  </LinearLayout>  
</RelativeLayout>
0 голосов
/ 27 декабря 2016

Проблема в том, что гравитация корня *1001* (основной макет, в котором вы храните остальные элементы) не установлена.Если вы измените его на center , гравитация других элементов должна работать нормально.

0 голосов
/ 29 марта 2016

для ImageView или других представлений, для которых не существует макета-гравитации или гравитации, используйте: android:layout_centerInParent="true" в дочернем (у меня был относительный макет с ImageView в качестве дочернего).

...