Android ConstraintLayout-如何将视图移动到占用空间?

时间:2018-07-13 19:52:57

标签: android android-constraintlayout

请看这张图片,这是我当前创建的:

enter image description here

但是我的问题是在某些时候颜色段可能变得不可见或消失了。这时我需要将尺寸段移到与颜色段相同的位置。我怎样才能做到这一点 ?基本上,在不可见/消失的情况下,我希望尺寸段代替颜色段。

我尝试创建准则,但这是恒定不变的,不会动摇。我想知道障碍是否会起作用?

1 个答案:

答案 0 :(得分:1)

我可以想到两种方法。一种仅使用XML但不太灵活,第二种则需要对代码进行一些更改并提供对Views的更多控制。请注意,这两个选项仅在颜色段的可见性设置为GONE时才有效,因为INVISIBLE的视图仍占据空间。

  1. 我们将两个视图的宽度百分比设置为50%。当颜色 段为GONE,由于 水平偏差。如果您设置此解决方案可能无法正常工作 这些视图的边距为固定值的50% 布局的可用宽度。

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/color"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Color"
            app:layout_constraintWidth_percent="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintHorizontal_bias="0"/>
    
        <TextView
            android:id="@+id/size"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Size"
            app:layout_constraintWidth_percent="0.5"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/color"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintHorizontal_bias="0"/>
    
    </android.support.constraint.ConstraintLayout>
    
  2. 我们将两个视图都放在一个权重链中,还添加了一个Space帮助器 用作“颜色”时剩余空间的填充物 视图是GONE。可见的视图的权重为 0.5,每个占可用空间的一半。 Space 帮助程序的权重为0,因此不可见。

    XML:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/layout">
    
        <TextView
            android:id="@+id/color"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Color"
            app:layout_constraintEnd_toStartOf="@id/size"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintHorizontal_bias="0"
            app:layout_constraintHorizontal_weight="0.5"/>
    
        <TextView
            android:id="@+id/size"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Size"
            app:layout_constraintEnd_toStartOf="@id/space"
            app:layout_constraintStart_toEndOf="@id/color"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintHorizontal_weight="0.5"/>
    
        <Space
            android:id="@+id/space"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/size"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintHorizontal_weight="0"/>
    
    </android.support.constraint.ConstraintLayout>
    

    现在,当您需要隐藏“颜色”细分时,您将需要执行某些操作 像这样:

    ConstraintSet cs = new ConstraintSet();
    ConstraintLayout layout = findViewById(R.id.layout);
    Space space = findViewById(R.id.space);
    TextView color = findViewById(R.id.color);
    cs.clone(layout);
    cs.setHorizontalWeight(space.getId(), 0.5f);
    cs.applyTo(layout);
    color.setVisibility(View.GONE);
    

    这将使“颜色”部分消失,但“尺寸”部分消失 会向左滑动,因为即使保留了约束, 则视图的可见性设置为GONESpace有它的 粗细设置为0.5,将占据右边的一半空间。