【问题标题】:How to align LinearLayout at the center of its parent?如何在其父级的中心对齐 LinearLayout?
【发布时间】:2021-05-27 22:03:57
【问题描述】:

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

更新::我找到了问题的原因——如果我用android:layout_width="fill_parent" 将内部的LinearLayout 放入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>

【问题讨论】:

    标签: android android-layout android-ui


    【解决方案1】:

    这两个属性经常被混淆:

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

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

    我多次发现自己把它们混在一起,想知道为什么事情没有正确居中......

    【讨论】:

    • 我已经为包含 TextViews 的布局尝试了 android:layout_gravity="center" - 没有帮助,它仍然左对齐。还尝试将此布局的宽度设置为 wrapfill - 没有区别。
    • 您是否尝试过在 Eclipse 中使用 Pixel Perfect 工具?它会向您显示应用的实时版本的布局边框,因此您通常可以找出哪里出错了。
    • +1 用于解释元素和父元素使用关键字“重力”之间的混淆差异。
    • +1 因为它解决了我的问题。我的示例 => 我有一个线性布局,其中有一个文本视图。它适用于texview。它水平居中tw。
    • LinearLayout 没有 layout_gravity
    【解决方案2】:

    请在你的线性布局中试试这个

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

    【讨论】:

    • 这些参数用于RelativeLayout
    • 这些不是线性布局参数
    • 不能在线性布局中使用。
    【解决方案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" 将水平放置视图中心。

    【讨论】:

    • 已经试过了。它不起作用!我不明白那里发生了什么......我已经发布了我的 XML 的完整代码,我只修剪了其他一些表格行。我的布局有什么问题?
    • 我认为它与表格行有关,他们将孩子添加到左侧。考虑为表格行标记提供 layout_width = "fill_parent"。
    • 对于此答案中的 xml 设置,如果仍然有问题,请再次检查 LinearLayoutlayout_width,它应该是 wrap_content 而不是 match_parent。同样的逻辑也适用于垂直对齐
    【解决方案4】:

    layout_gravity="center""center_horizontal" 添加到父布局。

    附带说明一下,TableRow 中的LinearLayout 似乎没有必要,因为TableRow 已经是水平的LinearLayout

    【讨论】:

    • 这是必要的,因为我需要表格来填充父级,并且只有几行要居中。而 layout_gravity 也无济于事。
    【解决方案5】:

    如果你的父级是 LinearLayout,你可以添加到它:

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

    对于它的孩子

    android:gravity="center"
    

    它至少应该水平居中!

    【讨论】:

      【解决方案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】:

        试试这个:

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

        【讨论】:

          【解决方案8】:

          试试&lt;TableRow android:gravity="center_horizontal"&gt; 这将使表格行内的内部LinearLayout居中。

          【讨论】:

            【解决方案9】:

            我在设计自定义通知时也遇到过同样的情况。我已尝试将以下属性设置为 true。

             android:layout_centerInParent.
            

            【讨论】:

              【解决方案10】:

              这对我有用。

              <LinearLayout>
              .
              .
              .
              android:gravity="center"
              .
              .>
              
              <TextView
              android:layout_gravity = "center"
              />
              <Button
              android:layout_gravity="center"
              />
              
              </LinearLayout>
              

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

              【讨论】:

                【解决方案11】:

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

                【讨论】:

                  【解决方案12】:

                  我在使用嵌套的 RelativeLayouts 时遇到了这种情况。我的解决方案最终很简单,但有一点需要注意。

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

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

                  ...但是,我没想到这个下面的布局是放在它上面的。此布局内的所有内容都向底部移动,而不是居中。添加...

                  android:layout_above="@id/bottomLayout"
                  

                  ...解决了我的问题。

                  【讨论】:

                    【解决方案13】:

                    试试这个:

                    android:layout_gravity="center_horizontal"
                    

                    【讨论】:

                      【解决方案14】:

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

                      【讨论】:

                        【解决方案15】:

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

                        【讨论】:

                          【解决方案16】:

                          以下是将您的 Linearlayout 置于底部并将其内容置于中心的代码。您必须使用 RelativeLayout 在底部设置布局。

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

                          【讨论】:

                            猜你喜欢
                            • 2023-03-15
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2015-10-14
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多