【问题标题】:Center a button in a Linear layout在线性布局中居中按钮
【发布时间】:2009-12-24 10:46:44
【问题描述】:

我正在使用线性布局来显示一个非常轻的初始屏幕。它有 1 个按钮,应该在屏幕上水平和垂直居中。但是,无论我尝试做什么,按钮都会顶部对齐中心。我已经包含了下面的 XML,有人能指出我正确的方向吗?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        android:background="@drawable/findme"></ImageButton>

</LinearLayout>

【问题讨论】:

  • 在具有水平对齐的 LinearLayout 中为我解决的问题是将 layout_width 设置为“wrap_content”。随后layout_gravity 做了它应该做的!
  • 如果您严格需要使用LinearLayout,我认为这应该可以:stackoverflow.com/questions/18051472/…

标签: xml android layout


【解决方案1】:

使用 LinearLayout 居中:

<LinearLayout
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/btnFindMe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/findme" />
</LinearLayout>

【讨论】:

  • LinearLayout 比RelativeLayout 更简单,重量更轻,应该会快一点。
  • 我使用的是 layout_gravity 而不是重力。更改为 android:gravity="center" 为我解决了这个问题。菜鸟错误。
  • @ackushiw 也是我的问题!
  • 至少对我来说 android:gravity="center" LinearLayout 属性起到了作用。谢谢大哥!
【解决方案2】:

如果您想在屏幕中间居中显示项目,请不要使用LinearLayout,因为它们用于连续显示多个项目。

请改用RelativeLayout

所以替换:

android:layout_gravity="center_vertical|center_horizontal"

对于相关的RelativeLayout 选项:

android:layout_centerInParent="true"

所以你的布局文件将如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout01" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/findme"></ImageButton>

</RelativeLayout>

【讨论】:

  • 有些情况下您需要使用 LinearLayout 和居中内容。这不应该是公认的答案。如果可能,建议使用RelativeLayout 会更好,否则如何 在LinearLayout 中居中。
  • 更不用说,RelativeLayout 的运行时间密集度更高,因为它们必须测量它们的尺寸,而 LinearLayout 超级简单且效率更高。
【解决方案3】:

您是否尝试过在布局中定义android:gravity="center_vertical|center_horizontal" 并在图像中设置android:layout_weight="1"

【讨论】:

  • 我喜欢这个选项,它可以让我保持 mi LinearLayout ! (不过,我不必在按钮中设置 android:weight="1" 以使其居中。)
  • android:gravity 在水平 LinearLayout 中对我不起作用,但 android:layout_gravity 可以。
【解决方案4】:

线性布局的一个常用方法是在图片按钮上设置一个属性

android:layout_gravity="center"

您可以选择是左对齐、居中对齐还是右对齐线性布局中的每个对象。请注意,上面的行与

完全相同
android:layout_gravity="center_vertical|center_horizontal"

【讨论】:

  • 在父布局中添加 android:gravity="center" 属性 - 它包含您的按钮(子组件)。
  • 你还需要 android.orientation="vertical" 加上父元素中的 layout_gravity,也就是 LInearLayout 元素......
【解决方案5】:

添加这个

android:gravity="center"

在线性布局中。

【讨论】:

  • 应该是android:gravity="center"
【解决方案6】:

如果你使用LinearLayout你可以添加重心:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">
            <Button
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            />
</LinearLayout>`

【讨论】:

    【解决方案7】:

    这很容易

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:visibility="visible" 
            android:gravity="center"
            android:orientation="vertical" >
    
            <ProgressBar
                android:id="@+id/pbEndTrip"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                />
    
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:text="Gettings" />
        </LinearLayout>
    

    【讨论】:

      【解决方案8】:

      您可以使用RelativeLayout

      【讨论】:

        【解决方案9】:
        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
        
            <ImageButton android:id="@+id/btnFindMe" 
                android:layout_width="match_parent" 
                android:layout_height="wrap_content"
                android:layout_gravity = "center"
                android:background="@drawable/findme">
            </ImageButton>
        
        </LinearLayout>
        

        上面的代码可以工作。

        【讨论】:

          【解决方案10】:

          根据android:layout_gravity的XML属性的Android文档,我们可以轻松做到:)

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
          
              <ImageButton android:id="@+id/btnFindMe" 
                  android:layout_width="wrap_content" 
                  android:layout_height="wrap_content"
          
                  android:layout_gravity="center"
          
                  android:background="@drawable/findme"></ImageButton>
          
          </LinearLayout>
          

          【讨论】:

          • android:layout_gravity="center" 工作正常 :) 谢谢!
          【解决方案11】:

          我机器上的完整和工作示例...

          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:paddingLeft="@dimen/activity_horizontal_margin"
              android:paddingRight="@dimen/activity_horizontal_margin"
              android:paddingTop="@dimen/activity_vertical_margin"
              android:paddingBottom="@dimen/activity_vertical_margin"
              android:orientation="vertical"
              tools:context=".MainActivity"
              android:gravity="center"
              android:textAlignment="center">
          
          
              <TextView
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:textAppearance="?android:attr/textAppearanceLarge"
                  android:text="My Apps!"
                  android:id="@+id/textView"
                  android:gravity="center"
                  android:layout_marginBottom="20dp"
               />
          
              <Button
                  android:layout_width="220dp"
                  android:layout_height="wrap_content"
                  android:text="SPOTIFY STREAMER"
                  android:id="@+id/button_spotify"
                  android:gravity="center"
                  android:layout_below="@+id/textView"
                  android:padding="20dp"
                  />
          
              <Button
                  android:layout_width="220dp"
                  android:layout_height="wrap_content"
                  android:text="SCORES"
                  android:id="@+id/button_scores"
                  android:gravity="center"
                  android:layout_below="@+id/textView"
                  android:padding="20dp"
                  />
          
          
              <Button
                  android:layout_width="220dp"
                  android:layout_height="wrap_content"
                  android:layout_centerInParent="true"
                  android:text="LIBRARY APP"
                  android:id="@+id/button_library"
                  android:gravity="center"
                  android:layout_below="@+id/textView"
                  android:padding="20dp"
                  />
          
              <Button
                  android:layout_width="220dp"
                  android:layout_height="wrap_content"
                  android:layout_centerInParent="true"
                  android:text="BUILD IT BIGGER"
                  android:id="@+id/button_buildit"
                  android:gravity="center"
                  android:layout_below="@+id/textView"
                  android:padding="20dp"
                  />
          
              <Button
                  android:layout_width="220dp"
                  android:layout_height="wrap_content"
                  android:layout_centerInParent="true"
                  android:text="BACON READER"
                  android:id="@+id/button_bacon"
                  android:gravity="center"
                  android:layout_below="@+id/textView"
                  android:padding="20dp"
                  />
          
              <Button
                  android:layout_width="220dp"
                  android:layout_height="wrap_content"
                  android:layout_centerInParent="true"
                  android:text="CAPSTONE: MY OWN APP"
                  android:id="@+id/button_capstone"
                  android:gravity="center"
                  android:layout_below="@+id/textView"
                  android:padding="20dp"
                  />
          
          </LinearLayout>

          【讨论】:

          • 你只能在 'RelativeLayout' 的兄弟姐妹上使用 'android:layout_below'
          【解决方案12】:

          只需使用 ( 使其位于布局的中心)

                  android:layout_gravity="center" 
          

          并使用

                   android:layout_marginBottom="80dp"
          
                   android:layout_marginTop="80dp"
          

          换个位置

          【讨论】:

            【解决方案13】:

            在 Button 中设置为 true android:layout_alignParentTop="true" android:layout_centerHorizontal="true",如下所示:

            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                >
                 <Button
                    android:id="@+id/switch_flashlight"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/turn_on_flashlight"
                    android:textColor="@android:color/black"
                    android:onClick="action_trn"
                    android:background="@android:color/holo_green_light"
                    android:layout_alignParentTop="true"
                    android:layout_centerHorizontal="true"
                    android:padding="5dp" />
            </RelativeLayout>
            

            【讨论】:

              【解决方案14】:

              您可以通过在父类中使用gravity="center" 属性来做到这一点,使其子位置位于中心。

              <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:gravity="center">
              

              【讨论】:

                【解决方案15】:

                你也可以试试这个代码:

                <LinearLayout
                            android:id="@+id/linear_layout"
                            android:layout_width="fill_parent"
                            android:layout_height="0dp"
                            android:layout_gravity="center"
                            android:orientation="horizontal"
                            android:weightSum="2.0"
                            android:background="@drawable/anyBackground" >
                
                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center"
                            android:orientation="vertical"
                            android:layout_weight="1" >
                
                            <ImageView
                                android:id="@+id/img_mail"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="center"
                                android:background="@drawable/yourImage" />
                        </LinearLayout>
                
                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center"
                            android:orientation="vertical"
                            android:layout_weight="1" >
                
                
                
                <ImageView
                            android:id="@+id/img_save"
                            android:layout_width="wrap_content"
                            android:layout_height="match_parent"
                            android:layout_gravity="center"
                            android:background="@drawable/yourImage" />
                        </LinearLayout>
                        </LinearLayout>
                

                【讨论】:

                • 您能解释一下这与已经提供的答案有何不同吗?
                【解决方案16】:

                您也可以将LinearLayout的宽度设置为wrap_content并使用android:layout_centerInParentandroid:layout_centerVertical="true"

                <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_centerInParent="true"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                >
                
                <ImageButton android:id="@+id/btnFindMe" 
                    android:layout_width="wrap_content" 
                    android:layout_height="wrap_content"       
                    android:background="@drawable/findme"/>
                

                【讨论】:

                  【解决方案17】:

                  这对我有用。

                  android:layout_alignParentEnd="true"
                  

                  【讨论】:

                    【解决方案18】:

                    在这种情况下,您还可以使用 RelativeLayout 作为该 ImageButton

                    的父级
                    android:layout_centerInParent="true"
                    

                    然后在ImageButton中使用上面的代码。

                    【讨论】:

                      【解决方案19】:

                      你试过了吗?

                        <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
                      android:id="@+id/mainlayout" android:orientation="vertical"
                      android:layout_width="fill_parent" android:layout_height="fill_parent">
                      <RelativeLayout
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:padding="5px"
                      android:background="#303030"
                      >
                          <RelativeLayout
                          android:id="@+id/widget42"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:layout_centerHorizontal="true"
                          >
                          <ImageButton
                          android:id="@+id/map"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:text="map"
                          android:src="@drawable/outbox_pressed"
                          android:background="@null"
                          android:layout_toRightOf="@+id/location"
                          />
                          <ImageButton
                          android:id="@+id/location"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:text="location"
                          android:src="@drawable/inbox_pressed"
                          android:background="@null"
                          />
                          </RelativeLayout>
                          <ImageButton
                          android:id="@+id/home"
                          android:src="@drawable/button_back"
                          android:background="@null"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:layout_centerVertical="true"
                          />
                      </RelativeLayout>
                      <LinearLayout
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:padding="5px"
                      android:orientation="horizontal"
                      android:background="#252525"
                      >
                          <EditText
                          android:id="@+id/searchfield"
                          android:layout_width="fill_parent"
                          android:layout_weight="1"
                          android:layout_height="wrap_content"
                          android:layout_centerHorizontal="true"
                          android:background="@drawable/customshape"
                          />
                          <ImageButton
                          android:id="@+id/search_button"
                          android:src="@drawable/search_press"
                          android:background="@null"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:layout_centerVertical="true"
                          />
                      </LinearLayout>
                      <com.google.android.maps.MapView
                          android:id="@+id/mapview" 
                          android:layout_weight="1"
                          android:layout_width="fill_parent"
                          android:layout_height="wrap_content" 
                          android:clickable="true"
                          android:apiKey="apikey" />
                      
                      </TableLayout>
                      

                      【讨论】:

                        【解决方案20】:

                        使用

                        android:layout_centerHorizo​​ntal="true"

                        【讨论】:

                        • 其实是vogon101,这是RelativeLayout中的一个有效属性。 :) 但是它没有回答这个问题,因为用户使用的是 LinearLayout 并且想要垂直和水平居中。
                        【解决方案21】:

                        使用相对布局会更容易,但对于线性布局,我通常通过确保宽度与父级匹配来居中:

                            android:layout_width="match_parent"
                        

                        然后相应地给左右边距。

                            android:layout_marginLeft="20dp"
                            android:layout_marginRight="20dp"
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2015-08-11
                          • 2012-12-17
                          • 1970-01-01
                          • 2012-04-20
                          • 1970-01-01
                          • 2020-07-27
                          • 1970-01-01
                          相关资源
                          最近更新 更多