it-swarm.com.ru

Как выровнять 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>
69
Violet Giraffe

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

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

Поэтому либо поместите Android:gravity="center" в родительский объект, либо Android:layout_gravity="center" в сам LinearLayout.

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

199
jkschneider

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

Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
16
Lakshmanan
<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>

рассмотрим обтекание относительнойLayout над LinearLayout. Android:layout_centerHorizontal="true" поместит центр обзора в горизонтальное положение.

9
Yashwanth Kumar

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

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

5
Emmanuel Sys

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

<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>
3
gitesh devhane

Попробуй это:

<?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>
3
Hiral

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

2
triggs

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

 Android:layout_centerInParent.
2
Karthikeyan Ve

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

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

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

</LinearLayout>

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

1
Prab

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

1
Pawan

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

0
bastami82

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

0
Marin Karadzhov

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