居中两个button水平

我试着安排两个button(在他们的图像上工作正常)彼此相邻,并居中水平。 这是我迄今为止:

<LinearLayout android:orientation="horizontal" android:layout_below="@id/radioGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|center"> <Button android:id="@+id/allow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/radioGroup" android:layout_gravity="center_horizontal" android:drawableLeft="@drawable/accept_btn" android:text="Allow"/> <Button android:id="@+id/deny" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/allow" android:layout_below="@id/radioGroup" android:layout_gravity="center_horizontal" android:drawableLeft="@drawable/block_btn" android:text="Deny"/> </LinearLayout> 

不幸的是,他们仍然左alignment。 任何帮助表示赞赏! 伊夫

编辑

不幸的是迄今没有任何意见或build议。 这就是为什么我尝试用RelativeLayout提供一个简化的,完整的布局:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true"> <TextView android:text="@+id/TextView01" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/allow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/TextView01" android:text="Allow"/> <Button android:id="@+id/deny" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/allow" android:layout_alignTop="@id/allow" android:text="Deny"/> </RelativeLayout> 

我已经尝试了LinearLayout和Button元素中的所有属性组合,没有运气。 任何其他的想法?

这是我的解决scheme:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true"> <TextView android:text="@+id/SomeText" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:orientation="horizontal" android:background="@android:drawable/bottom_bar" android:paddingLeft="4.0dip" android:paddingTop="5.0dip" android:paddingRight="4.0dip" android:paddingBottom="1.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/TextView01"> <Button android:id="@+id/allow" android:layout_width="0.0dip" android:layout_height="fill_parent" android:text="Allow" android:layout_weight="1.0" /> <Button android:id="@+id/deny" android:layout_width="0.0dip" android:layout_height="fill_parent" android:text="Deny" android:layout_weight="1.0" /> </LinearLayout> </RelativeLayout> 

我知道你已经find了一个解决scheme,但你也可能会发现这个有用的。 通过增加dip设置,用作中心参考的空TextView可以作为button之间的填充。 它也很好地处理屏幕方向的变化。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/button1" android:text="Left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_toLeftOf="@+id/centerPoint" /> <TextView android:id="@+id/centerPoint" android:text="" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <Button android:id="@+id/button2" android:text="Right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_toRightOf="@+id/centerPoint" /> </RelativeLayout> 

结果屏幕截图:

结果的屏幕截图

我不知道如果你真的find了这个问题的答案,但我通过做一个TableRow,将宽度设置为fill_parent,并将重力设置为中心,然后将两个button放在其中。

  <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test" android:width="100dip"></Button> <Button android:layout_width="wrap_content" android:text="Test" android:layout_height="wrap_content" android:width="100dip"></Button> </TableRow> 

如果您正在寻找一个快速完全的RelativeLayout解决scheme,以下工作正常。 虚拟视图元素不可见并居中水平。 两个button都左alignment或右alignment。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.be.android.stopwatch" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center_horizontal"> <View android:id="@+id/dummy" android:visibility="visible" android:layout_height="0dip" android:layout_width="1dip" android:background="#FFFFFF" android:layout_centerHorizontal="true"/> <ImageButton android:id="@+id/button1" android:layout_height="25dip" android:layout_alignTop="@+id/dummy" android:layout_toLeftOf="@+id/dummy" android:layout_width="50dip"/> <ImageButton android:id="@+id/button2" android:layout_height="25dip" android:layout_alignTop="@+id/dummy" android:layout_toRightOf="@+id/dummy" android:layout_width="50dip"/> </RelativeLayout> 

名为android:layout_foo属性是LayoutParams – 视图父项的参数。 尝试在LinearLayout上设置android:gravity="center" ,而不是android:layout_gravity 。 一个会影响LinearLayout如何在其自身内部布局子LinearLayout ,另一个会影响LinearLayout的父级应该如何处理它。 你想要前者。

我以这种方式居中两个button:

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/one" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/two" /> </LinearLayout> </LinearLayout> 

我已经包装了两个水平的LinearLayout,如下所示:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" > 

你的UI小部件在这里

 </LinearLayout> </LinearLayout> 

这似乎是一个非常古老的问题,但我也有同样的问题。 我必须在屏幕的中间(水平)放置两个彼此相邻的button。 我最终将两个button放置在一个线性布局中,并将线性布局放置在相对布局中,其重力设置为中心。


更新:我发现一个更简单的解决scheme:

 <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_centerHorizontal="true"> <Button android:text="status" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <Button android:text="fly" android:layout_height="wrap_content" android:layout_width="wrap_content"/> </LinearLayout> 

这就是我之前所做的:

  <RelativeLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/actionButtons" android:layout_below="@id/tripInfo" android:gravity="center"> <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content"> <Button android:text="status" android:layout_height="wrap_content" android:layout_width="wrap_content" /> <Button android:text="fly" android:layout_height="wrap_content" android:layout_width="wrap_content" /> </LinearLayout> </RelativeLayout> 

使用Relatie布局而不是Linear,并将gravity设置为android:gravity =“center”

如果运行不同大小的设备的应用程序,相对布局会提供更好的性能和更好的扩展性。

以下面的示例XML和生成的UI为例:

  <RelativeLayout android:layout_width="match_parent" android:layout_height="80dp" android:background="@Color/custom1" android:gravity="center" > <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@color/Red" android:gravity="center" android:layout_marginRight="80dp" android:text="Text11111" /> <TextView android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="50dp" android:layout_toRightOf="@id/tv1" android:background="@color/Yellow" android:gravity="center" android:text="Text22222" /> </RelativeLayout> 

在这里输入图像说明

这就是我所做的,我用线性布局包裹了一个线性布局,将其重力设置为center_horizo​​ntal。 然后,我将包装的线性布局宽度设置为组合的button的像素宽度。 在这个例子中,button的宽度是100px,所以我将包装的线性布局设置为200px。

示例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" android:gravity="center_horizontal"> <TextView android:layout_width="fill_parent" android:layout_height="200px" android:text="This is some text!" android:background="#ff333333" /> <LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:layout_width="200px"> <Button android:id="@+id/button1" android:layout_height="wrap_content" android:text="Button 1" android:layout_width="100px"> </Button> <Button android:id="@+id/button2" android:layout_height="wrap_content" android:text="Button 2" android:layout_width="100px"> </Button> </LinearLayout> </LinearLayout> 

我感到你的痛苦,我不得不调整一下,得到这个工作。

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/Button01" android:layout_alignParentLeft="true" android:layout_width="75dp" android:layout_height="40dp" android:layout_marginTop="15dp" android:layout_marginLeft="60dp" android:text="No" /> <Button android:id="@+id/Button02" android:layout_alignParentRight="true" android:layout_width="75dp" android:layout_height="40dp" android:layout_marginTop="15dp" android:layout_marginRight="60dp" android:text="Yes" /> <TextView android:id="@+id/centerPoint" android:layout_toRightOf="@id/Button01" android:layout_toLeftOf="@id/Button02" android:text="" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> </RelativeLayout> 

这对我来说很好:

 <RadioGroup android:id="@+id/ratingRadioGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_gravity="center_horizontal"> <RadioButton android:id="@+id/likeButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="@string/like" android:paddingRight="20pt"/> <RadioButton android:id="@+id/dislikeButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/dislike" /> </RadioGroup> 

在不引入冗余组件或视图组的情况下,最好的方法是使用间距。 您可以在线性布局中使用layout_weight的空间元素来获得所需的效果:

 <LinearLayout android:orientation="horizontal" android:layout_below="@id/radioGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|center"> <Space android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" /> <Button android:id="@+id/allow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/radioGroup" android:drawableLeft="@drawable/accept_btn" android:text="Allow"/> <Button android:id="@+id/deny" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/allow" android:layout_below="@id/radioGroup" android:drawableLeft="@drawable/block_btn" android:text="Deny"/> <Space android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout> 

给这两个空间元素一个相等的layout_weight(权重是多less并不重要,只是把它们看作是所有权重总和中的一个比率)使空间元素占据了可用的额外空间。 所以它强制button的中间,没有任何layout_weight分配给他们,所以他们不需要任何额外的空间,只是他们明确给予(图像的大小)。

这是我使用relativeLayout的解决scheme:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <Button android:id="@+id/reject_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/reject"/> <Button android:id="@+id/accept_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/accept" android:layout_toRightOf="@id/reject_btn"/> </RelativeLayout> 

使用RelativeLayout而不是LinearLayout并设置其android_layout:gravity="center_horizontal"或者非常不理想的方法是将LinearLayoutandroid_padding设置为以像素值为中心alignment。

下面的代码将alignment中间水平的两个button,没有给出dp。 所以这将在所有方向和所有屏幕上工作。

 <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Change password" android:id="@+id/change_pwd_button" android:layout_gravity="center_horizontal" android:background="@android:color/holo_blue_dark" android:textColor="@android:color/white" android:padding="25px"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Close" android:id="@+id/change_pwd_close_btn" android:layout_gravity="center_horizontal" android:background="@android:color/holo_blue_dark" android:textColor="@android:color/white" android:layout_marginLeft="20dp" /> </LinearLayout> 

这个工作对我来说。 简单和容易。

 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/btn_one" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button One" /> <Button android:id="@+id/btn_two" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button Two" android:layout_toRightOf="@id/btn_one" /> </RelativeLayout> </LinearLayout> </RelativeLayout>