2009-12-24 104 views
289

我正在使用线性布局来显示相当浅的初始屏幕。它有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> 
+6

什么用水平对齐方式的LinearLayout固定对我来说是设置'layout_width'为 “WRAP_CONTENT”。随后'layout_gravity'做了它应该做的事! – 2012-11-28 00:53:31

+0

如果您严格需要使用LinearLayout,我认为这应该可以工作:http://stackoverflow.com/questions/18051472/how-to-center-the-content-inside-a-linear-layout – Antonio 2015-05-26 15:11:16

回答

336

如果您想要在屏幕中间放置一个项目,请不要使用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> 
+0

完美,我应该尝试过RelativeLayout! – themaninthesuitcase 2009-12-24 11:23:06

+29

有些情况下您需要使用LinearLayout和中心内容。这不应该被接受的答案。如果可能,最好建议使用RelativeLayout,如果不是_how_以LinearLayout为中心。 – stevebot 2015-03-18 00:16:39

+0

更不用提的是RelativeLayout由于测量尺寸的方式而导致运行时密集得多,而LinearLayout则非常直接,而且效率更高。 – 2017-07-14 19:39:25

40

您是否尝试过定义android:gravity="center_vertical|center_horizontal"里面的布置和图像设置android:layout_weight="1"

+2

我喜欢这个选项让我保持LinearLayout! (我没有在按钮中设置'android:weight =“1”'来居中它。) – 2011-07-02 10:47:18

+3

android:重力对水平LinearLayout不起作用,但android:layout_gravity。 – jfritz42 2012-03-13 16:27:28

-2

你试试这个?

与线性布局工作
<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> 
31

一个常用的方法是设置在图像按钮属性

android:layout_gravity="center" 

您可以选择是否要左对齐,居中对齐或右对齐线性布局中的每个对象。需要注意的是上面的行恰恰是一样使用的LinearLayout

android:layout_gravity="center_vertical|center_horizontal" 
+4

....我试过这样做到高地狱...从来没有工作..... – dell116 2012-03-02 21:57:28

+4

添加android:重力=“中心”属性在父布局 - 它拥有你的按钮(子组件)。 – 2013-01-08 14:05:41

+0

您还需要android.orientation =“vertical”加上父级中的layout_gravity,也就是LInearLayout元素.... – 2015-07-23 14:08:32

400

中心:

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

LinearLayout比RelativeLayout更简单,更轻,应该快一点。 – SurlyDre 2013-11-15 03:22:41

+2

我使用的是layout_gravity而不是重力。改为android:gravity =“center”为我解决了这个问题。菜鸟的错误。 – ackushiw 2015-12-20 01:39:29

+0

@ackushiw也是我的问题! – Denny 2017-02-11 11:57:13

5

可以使用RelativeLayout

-7

它会更容易使用相对布局,但线性布局,我通常制作中心确保宽度匹配父:

android:layout_width="match_parent" 

,然后只给利润率向右和向左相应。

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

使用

机器人:layout_centerHorizo​​ntal = “真”

+0

什么?这是垃圾,这甚至不是一个有效的财产! – 2014-04-10 09:47:18

+1

其实vogon101,这是一个RelativeLayout中的有效属性。 :) 但它并没有回答这个问题,因为用户使用的是LinearLayout,并且想要垂直和水平居中。 – Sarah 2014-05-09 01:09:58

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

你也可以试试这个代码:

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

你能解释这与已经提供的答案有何不同吗? – EWit 2014-09-19 11:09:25

2

完全从我的机器工作样本...

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

+0

您只能在'RelativeLayout' – jazz 2016-11-10 12:49:38

0

只是用(使它在布局的中心)

 android:layout_gravity="center" 

,并使用

  android:layout_marginBottom="80dp" 

     android:layout_marginTop="80dp" 

改变现在的位置

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

上面的代码将正常工作。

1

中为每个的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> 
7

添加此

android:gravity="center" 

在LinearLayout中。

+0

的兄弟上使用'android:layout_below'应该是'android:gravity =“center” – 2017-01-15 14:51:52

0

设置为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> 

enter image description here