将RelativeLayout中的多个项目居中而不将它们放在容器中?

时间:2011-12-17 00:25:57

标签: android xml

我有一个包含一对并排按钮的RelativeLayout,我希望它在布局中居中。我可以将按钮放在LinearLayout中并将其放在RelativeLayout中,但我希望尽可能保持我的xml干净。

这是我尝试过的,这只是将“应用”按钮放在中间,将“撤消”按钮放在左侧:

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

5 个答案:

答案 0 :(得分:61)

android:gravity会将内容与viewlayout内的内容对齐。

android:layout_gravity会将viewlayout与其父母内部对齐。

所以添加

android:gravity="center"

你的RelativeLayout应该做的伎俩...

像这样:

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

</RelativeLayout>

答案 1 :(得分:9)

这是BrainCrash答案的扩展。它是一个非嵌套选项,可以水平和垂直地对所有三个进行分组和居中。此外,它采用顶部TextView并在两个按钮上水平居中。如果需要,您可以使用android:gravity =“center”将文本置于TextView中心。我还删除了边距,添加了颜色,并将RelativeLayout高度设置为fill_parent以突出显示布局。在API 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>

答案 2 :(得分:5)

android:layout_gravity="center"

几乎可以提供你正在寻找的东西。

答案 3 :(得分:4)

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

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

我通过嵌套两个RelativeLayout来解决这个问题,其中最外面的布局包括了 按钮和内部相对布局。

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

这是一个片段,提供了如何完成居中和其他布局的详细信息:

请参阅:RelativeLayout Gravity not applied?和      Gravity and layout_gravity on Android 重力和layout_gravity之间的区别。

调整btn_button1按钮上的paddingLeft,看看TextView不会移动。

(对于downvotes我道歉。我太匆忙地认为你的建议没有解决问题的确切问题,他们确实有助于解决非常类似的情况(这里的答案解决了一个问题)非常具体的情况,只有所有这些答案的组合解决了我的问题。我尝试了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>

答案 4 :(得分:2)

LinearLayout是个不错的选择。除此之外,还有一些选项,比如创建一个不可见的视图和中心,然后将左边的按钮左右对齐。但这些只是解决方法。