在RelativeLayout中通过中心线对齐视图

3
我有一个根RelativeLayout和子视图。
在一些视图V1之后,我想放置3个视图:TextView TV1、TextView TV2和ProgressBar Progress。当然,Progress的高度比textviews大。在这3个视图放置其他视图之后。
我如何使用“中心”线放置TV1、TV2、Progress?不使用任何额外的容器,例如:LinearLayout
如下图所示: enter image description here

1
您可以为视图添加 android:centerVertical="true" 属性。 - Phantômaxx
为什么你不想要一个容器?我认为嵌套布局总是一个好的方法。 - Carlos Robles
@Carlos Robless,我认为:容器越少,在渲染时浪费就越少。 - Yura Shinkarev
无论如何,这是你能做的最好的。如果你还是不想,你可以在运行时计算3个元素的高度,并通过编程添加适当的边距。 - Carlos Robles
你尝试过这样的代码吗:android:layout_alignBaseline="@id/progress",或者反过来吗? - user2305886
5个回答

1
选择一个参考视图(比如说在你的情况下是progressBar),并将其他视图相对于其顶部底部对齐。这样它们就会相对于其水平轴居中。
android:layout_alignTop ="@+id/reference_progressbar_id"
android:layout_alignBottom ="@id/reference_progressbar_id"

0

步骤1 创建一个包含这三个视图的LinearLayout,并像以下代码一样设置android:gravity="center"到线性布局中

<LinearLayout 
android:id="@+id/action_header_RL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" 
android:gravity="center"
>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="123"/>

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="456"/>

     <ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
</LinearLayout>

已经,谢谢,我知道这个实现。但是我想只使用根RelativeLayout。 - Yura Shinkarev
@YShinkarev 使用RelativeLayout作为根视图,但在其中可以使用包含这三个视图的LinearLayout。 - Sunil Kumar Sahoo

-1
    Try This Below Code:

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center" >

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ANDROID"
        android:layout_toLeftOf="@id/TextViewValue" />

    <TextView
        android:id="@+id/TextViewValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="Layout" />

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/TextViewValue" />

</RelativeLayout>

你的代码问题在于你没有使用视图来放置在电视/进度条上方或下方。 - Yura Shinkarev

-1
android:centerVertical="true" 添加到您想要居中的视图上,但这并不能保证它们不会重叠其他添加到布局中的视图。

-1

保持tv1 tv2和progress这个属性

<android:layout_centerVertical="true">

保持tv1 android:layout_alignParentLeft="true"

将tv2放在tv1的右边,保持进度条(progress)放在tv2的右边


@Mahmoud Elmorabea,@Frank N. Stein无法使用android:centerVertical,因为我使用了layout_below(在V1下方)。 - Yura Shinkarev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接