Подтвердить что ты не робот

Как выровнять LinearLayout в центре своего родителя?

Я просмотрел множество подобных вопросов здесь, в 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>
4b9b3361

Ответ 1

Эти два атрибута обычно путаются:

  • android:gravity задает серьезность содержимого View использован сверху.
  • android:layout_gravity задает гравитацию вида или Макет относительно его родителя.

Итак, либо поместите android:gravity="center" в родительский, либо android:layout_gravity="center" на сам LinearLayout.

Я поймал себя несколько раз, смешивая их и задаваясь вопросом, почему вещи не центрируются должным образом...

Ответ 2

Попробуйте это в линейном макете

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

Ответ 3

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
    <LinearLayout 
            android:orientation="horizontal"
            android:layout_centerHorizontal="true"
            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>
</RelativeLayout>

рассмотрим обертывание relativeLayout над LinearLayout. android:layout_centerHorizontal="true" будет располагать горизонтальный угол обзора.

Ответ 4

добавить layout_gravity="center" или "center_horizontal" в родительский макет.

На боковой ноте ваш LinearLayout внутри вашего TableRow кажется ненужным, поскольку TableRow уже является горизонтальным LinearLayout.

Ответ 5

Попробуйте следующее:

<?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"
                    android:gravity="center_horizontal" 
                    android:layout_gravity="center_horizontal" >
                    <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>

Ответ 6

Это сработало для меня.. добавление пустого представления.

<LinearLayout
       android:layout_width="match_parent"
        android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
        android:orientation="horizontal"
         >
<View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            />  
     <com.google.android.gms.ads.AdView

         android:id="@+id/adView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"

         android:layout_gravity="center_horizontal"
         ads:adSize="BANNER"
         ads:adUnitId="@string/banner_ad_unit_id" >

    </com.google.android.gms.ads.AdView>
    <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            />  
    </LinearLayout>

Ответ 7

Попробуйте <TableRow android:gravity="center_horizontal"> Это будет центрировать внутренний LinearLayout внутри tablerow.

Ответ 8

Я столкнулся с такой же ситуацией при разработке пользовательского уведомления. Я пробовал со следующим набором атрибутов с true.

 android:layout_centerInParent.

Ответ 9

Эксперимент

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

Ответ 10

это сработало для меня.

<LinearLayout>
.
.
.
android:gravity="center"
.
.>

<TextView
android:layout_gravity = "center"
/>
<Button
android:layout_gravity="center"
/>

</LinearLayout>

таким образом, вы проектируете линейный макет, чтобы поместить все его содержимое (TextView и Button) в его центр, а затем TextView и Button располагаются относительно центра линейного макета.

Ответ 11

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

Ответ 12

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

Ответ 13

Ниже приведен код для размещения 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>

Ответ 14

Я испытал это, работая с вложенными RelativeLayouts. Мое решение в итоге оказалось простым, но оно немного понято, о котором стоит знать.

Мой макет был определен с...

android:layout_height="fill_parent"
android:layout_below="@id/someLayout
android:gravity="center"

... однако я не думал, что макет ниже этого был помещен сверху этого. Все внутри этого макета было смещено вниз, а не по центру. Добавление...

android:layout_above="@id/bottomLayout"

... исправил мою проблему.