如何将LinearLayout对齐其父级的中心?

时间:2011-11-18 10:23:03

标签: android android-layout android-ui

我在SO看了很多类似的问题,但没有任何帮助。 我有一个不同嵌套布局的层次结构,都有android:layout_width="fill_parent",最里面的布局有android:layout_width="wrap_content - 我需要在中心(水平)对齐它。我该怎么做?

更新::我找到了问题的原因 - 如果我将内部LinearLayout与android:layout_width="fill_parent"放入RelativeLayout,它仍会包含它的内容。但是,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>

16 个答案:

答案 0 :(得分:205)

这两个属性通常是混淆的:

  • android:gravity设置View的内容的重力 用过。
  • android:layout_gravity设置视图的重力或 布局相对于其父

所以要么将android:gravity="center"放在父级上,要么android:layout_gravity="center"放在LinearLayout本身上。

我已经把自己混淆了很多次并且想知道为什么事情没有正确地集中......

答案 1 :(得分:16)

请在线性布局中尝试此操作

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

答案 2 :(得分:9)

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

考虑在LinearLayout上包装relativeLayout。 android:layout_centerHorizontal="true"会将视图中心放在水平位置。

答案 3 :(得分:5)

layout_gravity="center""center_horizontal"添加到父版块。

在旁注中,LinearLayout内的TableRow似乎没有必要,因为TableRow已经是横向{​​{1}}。

答案 4 :(得分:3)

试试这个:

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

答案 5 :(得分:3)

这对我有用..添加空视图..

SOMTHING_SIZE

答案 6 :(得分:2)

尝试<TableRow android:gravity="center_horizontal">这会将内部LinearLayout置于tablerow中心。

答案 7 :(得分:2)

我在设计自定义通知时遇到了同样的情况。我尝试使用以下属性设置为true。

 android:layout_centerInParent.

答案 8 :(得分:1)

@jksschneider解释几乎是正确的。确保您没有将任何gravity设置为父版式,然后将layout_gravity="center"设置为您的视图或布局。

答案 9 :(得分:1)

这对我有用。

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

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

</LinearLayout>

因此,您要设计线性布局以将其所有内容(TextView和Button)放在其中心,然后将TextView和Button相对于线性布局的中心放置

答案 10 :(得分:1)

我在使用嵌套的RelativeLayouts时遇到了这种情况。我的解决方案最终变得很简单,但是值得一提的是一个小陷阱。

我的布局是用...定义的

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

...但是,我不认为该布局下方的布局位于其顶部。此布局内的所有内容都移至底部而不是居中。正在添加...

android:layout_above="@id/bottomLayout"

...解决了我的问题。

答案 11 :(得分:1)

如果你的父元素是 LinearLayout,你可以添加:

android:orientation="vertical"
android:gravity="center"

给它的孩子

android:gravity="center"

它至少应该水平居中!

答案 12 :(得分:0)

对于ImageView或其他布局重力或重力不存在的视图使用:             孩子android:layout_centerInParent="true" (作为一个孩子,我有一个ImageView的相对布局。)

答案 13 :(得分:0)

问题是未设置 root的(存储其他元素的主要布局)重力。如果将其更改为 center ,其他元素的重力必须正常工作。

答案 14 :(得分:0)

以下是用于将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>

答案 15 :(得分:0)

试试这个:

android:layout_gravity="center_horizontal"