如何在相对布局中居中两个视图?

Mak*_*iev 8 android center alignment relativelayout

任务很简单:有两个按钮,TextView上面有一个按钮.所有小部件都应该在相对布局中居中.我唯一的想法是创建第三个小部件View并将其用作按钮的中心轴.有任何想法吗?冗余布局不是一个好的解决方案.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/tv_progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="@string/app_name" />

    <View
        android:id="@+id/view_axis"
        android:layout_width="1dp"
        android:layout_height="1dp"
        android:layout_below="@id/tv_progress"
        android:layout_centerInParent="true" />

    <Button
        android:id="@+id/button_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_progress"
        android:layout_toLeftOf="@id/view_axis"
        android:text="@string/start" />

    <Button
        android:id="@+id/button_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_progress"
        android:layout_toRightOf="@id/view_axis"
        android:text="@string/stop" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

cod*_*gic 6

如果我理解你想要什么,你可以把它Button放在一个LinearLayout中心

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView
    android:id="@+id/tv_progress"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:text="@string/app_name" />
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_below="@id/tv_progress">
<Button
    android:id="@+id/button_start"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/start" />

<Button
    android:id="@+id/button_stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/stop" />
 </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是"冗余布局"的意思,但如果它能满足您的需求,那么这样做很好.

  • 我当然可以.但它是一个多余的`LinearLayout`.之后我阅读了[Android布局技巧#3](http://android-developers.blogspot.ru/2009/03/android-layout-tricks-3-optimize-by.html)和[Android布局技巧#1] (http://android-developers.blogspot.ru/2009/02/android-layout-tricks-1.html),我开始更仔细地构建布局. (2认同)
  • 以这种方式使用它不会伤害你.也许如果它在`ListView`但如果不是这不是问题.你不需要太多不必要的嵌套`布局',但在这种情况下,这是我看到的最简单的方法.所以它没有必要,只有一个嵌套的`布局` (2认同)

Ark*_*ski 5

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

    <Spinner
        android:id="@+id/sp_rooms"
        android:layout_toLeftOf="@id/space"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Space
        android:id="@+id/space"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_registration"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/space"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)