如何在RelativeLayout中相对于多个视图对齐视图?

时间:2017-11-01 00:55:11

标签: android android-layout android-constraintlayout android-relativelayout

我有一个父亲RelativeLayout和3个子视图。查看一个,查看两个对齐父底部。如果视图1可见,我希望我的视图3在视图上方对齐,否则如果视图1不可见,则在视图2上方对齐。

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools">

    <View
        android:id="@+id/one"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:background="@color/green"
        tools:visibility="visible"/>

    <View
        android:id="@+id/two"
        android:layout_width="250dp"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:background="@color/red"/>

    <View
        android:id="@+id/three"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_above="@id/one"
        android:layout_marginBottom="10dp"
        android:background="@color/yellow"/>

</RelativeLayout>

我知道如果我将一个视图放在另一个视图中并将视图三视图放在另一个图层上方,它将起作用,但是从当前的架构来看,我不允许这样做。有没有其他方法来实现这一目标? ConstraintLayout能否解决这个问题?

3 个答案:

答案 0 :(得分:2)

试试这个:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools">

    <View
        android:id="@+id/one"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:layout_above="@+id/two"
        android:background="@android:color/holo_green_dark"
        tools:visibility="visible"/>

    <View
        android:id="@+id/two"
        android:layout_width="250dp"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:background="@android:color/holo_red_dark"/>

    <View
        android:id="@+id/three"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_above="@+id/one"
        android:layout_marginBottom="10dp"
        android:background="@android:color/holo_blue_bright"/>

</RelativeLayout>

问题是你只需添加

android:layout_above="@+id/two"

查看一个会使其保持在视图2之上并添加

的视图

android:layout_above="@+id/one"

查看三个将使其保持在视图之上的三个。

因此,如果查看一个是可见性已消失,则视图三将保持在视图二之上。

您可以通过为视图一设置可见性来对此进行测试。

  

ConstraintLayout能否解决这个问题?

答案 1 :(得分:0)

我们可以通过编程方式实现这一目标。

根据第一个视图可见性状态找到以下代码以对齐第三个视图。

final View view3 = findViewById(R.id.three);

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100, 100);
params.addRule(RelativeLayout.ABOVE, view3.getVisibility() == View.VISIBLE ? R.id.one : R.id.two);
view3.setLayoutParams(params);

答案 2 :(得分:0)

如果您想使用当前的布局,则可以以编程方式将视图1的高度设置为零,而不是更改其可见性。在这种情况下,视图3保留在一个顶部,由于高度为零,视图3将出现在视图二的顶部。

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.one);
relativeLayout.getLayoutParams().height = 0;