请看这张图片,这是我当前创建的:
但是我的问题是在某些时候颜色段可能变得不可见或消失了。这时我需要将尺寸段移到与颜色段相同的位置。我怎样才能做到这一点 ?基本上,在不可见/消失的情况下,我希望尺寸段代替颜色段。
我尝试创建准则,但这是恒定不变的,不会动摇。我想知道障碍是否会起作用?
答案 0 :(得分:1)
我可以想到两种方法。一种仅使用XML但不太灵活,第二种则需要对代码进行一些更改并提供对Views
的更多控制。请注意,这两个选项仅在颜色段的可见性设置为GONE
时才有效,因为INVISIBLE
的视图仍占据空间。
我们将两个视图的宽度百分比设置为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>
我们将两个视图都放在一个权重链中,还添加了一个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);
这将使“颜色”部分消失,但“尺寸”部分消失
会向左滑动,因为即使保留了约束,
则视图的可见性设置为GONE
。 Space
有它的
粗细设置为0.5
,将占据右边的一半空间。