【问题标题】:Align views by center line in RelativeLayout在 RelativeLayout 中按中心线对齐视图
【发布时间】:2014-07-02 10:55:49
【问题描述】:

我有 root RelativeLayout 和子视图。

在一些视图 V1 之后,我想放置 3 个视图:TextView TV1、TextView TV2 和 ProgressBar Progress。 Ofcouse,进度的高度大于文本视图。在这 3 个视图之后放置了其他视图。

如何使用“中心”线放置 TV1、TV2、进度?不使用任何额外的容器,例如:LinearLayout

【问题讨论】:

  • 你可以给你的视图一个android:centerVertical="true"属性
  • 为什么你不想要一个容器?我认为嵌套布局总是一个好方法
  • @Carlos Robless,我认为:更少的容器,更少的渲染浪费。
  • 无论如何这是你能做的最好的。如果您仍然不想要,您可以在运行时计算 3 个元素的高度,并以编程方式添加适当的边距
  • 您是否尝试过类似:android:layout_alignBaseline="@id/progress" 或反向?

标签: android xml android-relativelayout


【解决方案1】:

选择一个参考视图(在您的情况下假设为progressBar)并将其他视图相对于其顶部底部对齐。这样,它们将相对于水平轴居中。

android:layout_alignTop ="@+id/reference_progressbar_id"
android:layout_alignBottom ="@id/reference_progressbar_id"

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 已经,谢谢,我知道这个实现。但我只想使用 root RelativeLayout。
    • @YShinkarev 使用RelativeLayout作为根,但在里面你可以使用包含这三个视图的LinearLayout。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      用 tv1 tv2 和进度保持这个属性

      并保持 tv1 android:layout_alignParentLeft="true"

      和tv2 to_Rightof tv1 和进度保持到_RightOf tv2

      【讨论】:

      • @Mahmoud Elmorabea, @Frank N. Stein 不工作 android:centerVertical 因为我使用 layout_below(低于 V1)。
      【解决方案5】:
          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>
      

      【讨论】:

      • 您的代码存在问题,即您没有使用 TV/Progress 上方/下方的视图。