将多个项目置于RelativeLayout中,而不将它们放在容器中?

我有一个RelativeLayout包含一对并排button,我想要在布局中居中。 我可以把button放在一个LinearLayout中,并把它放在RelativeLayout中,但我想保持我的xml尽可能干净。

这是我试过的,只是把“应用”button放在中间,左边是“撤消”button:

<RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="15sp"> <TextView android:id="@+id/instructions" android:text="@string/instructions" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="15sp" android:layout_centerHorizontal="true" /> <Button android:id="@+id/apply" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/apply" android:textSize="20sp" android:layout_below="@id/instructions" /> <Button android:id="@+id/undo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/undo" android:textSize="20sp" android:layout_toLeftOf="@id/apply" android:layout_below="@id/instructions" /> </RelativeLayout> 

Solutions Collecting From Web of "将多个项目置于RelativeLayout中,而不将它们放在容器中?"

android:gravity将alignmentview的内容或使用它的layout

android:layout_gravity将alignment父viewlayout

所以补充

 android:gravity="center" 

你的RelativeLayout应该做的伎俩…

喜欢这个:

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_marginTop="15sp"> </RelativeLayout> 

这是BrainCrash答案的延伸。 这是一个非嵌套的选项,将所有三个元素进行水平和垂直分组和居中。 另外,它将顶部的TextView横置在两个button之间。 如果需要,您可以使用android:gravity =“center”将TextView放在TextView中间。 我还删除了边距,添加了颜色,并将RelativeLayout高度设置为fill_parent以突出显示布局。 testingAPI 11。

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:background="@android:color/black" > <TextView android:id="@+id/instructions" android:text="TEST" android:textSize="20sp" android:background="@android:color/darker_gray" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignLeft="@+id/undo" android:layout_alignRight="@+id/apply" android:gravity="center" /> <Button android:id="@+id/apply" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="APPLY" android:textSize="20sp" android:layout_below="@id/instructions" /> <Button android:id="@+id/undo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="UNDO" android:textSize="20sp" android:layout_toLeftOf="@id/apply" android:layout_below="@id/instructions" /> </RelativeLayout> 
 android:layout_gravity="center" 

几乎会给你想要的。

这是上述答案的组合,解决了我的具体情况:

将两个单独的标签居中放置在一个布局中,该布局还包括同一个布局(button,标签,标签,从左到右,其中标签相对于包含所有三个视图的布局居中的最左边位置的button) – 也就是说,该button不会将标签推离中心)。

我通过嵌套两个RelativeLayout解决了这个问题,其中最外层的布局包括Button和Inner-RelativeLayout。

Inner-RelativeLayout包含两个文本标签(TextView的)。

这是一个片段,提供了如何进行居中和其他布局的细节:

请参阅: RelativeLayout重力不适用? 以及Android上的Gravity和layout_gravity,以便引力和layout_gravity之间的差异。

调整btn_button1 Button上的paddingLeft以查看TextView的不移动。

(我很抱歉为了降低薪水,我太匆忙,认为只是你的build议没有解决问题的确切问题,他们确实帮助解决了非常相似的情况(这里的答案解决了一个非常具体的情况,只有所有这些答案的组合解决了我的问题,我尝试了upvoting,但它不会让我,除非我编辑的答案,我不想这样做。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rl_outer" android:layout_width="fill_parent" android:layout_height="50dip" android:background="#FF0000FF"> <Button xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/btn_button1" android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="#FF00FF00" android:text="&lt;" android:textSize="20sp" android:paddingLeft="40dip"/> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rl_inner" android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="#FFFF00FF" android:layout_centerInParent="true" android:gravity="center"> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv_text1" android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="#FF505050" android:textSize="20sp" android:textColor="#FFFFFFFF" android:text="Complaint #" android:gravity="center"/> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv_text2" android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="#FF505050" android:textSize="20sp" android:textColor="#FFFFFFFF" android:layout_toRightOf="@id/tv_text1" android:gravity="center"/> </RelativeLayout> </RelativeLayout> 

LinearLayout是一个不错的select。 除此之外,还有一些选项可以创build一个不可见的视图并将其居中,然后将左侧的buttonalignment到左侧和右侧。 但那些只是解决办法。