Да, ваш рабочий орган пуст. Это не фатальная ошибка, просто замените ></activity>
на />
Я могу придумать два способа сделать это. Тот, который использует только XML, но менее гибкий, и второй, который требует некоторых изменений в коде и дает больший контроль над Views
. Обратите внимание, что оба они будут работать только тогда, когда видимость цветового сегмента установлена на GONE
, поскольку представления, которые INVISIBLE
все еще занимают место.
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);
Это приведет к исчезновению сегмента Color, но сегмент размера будет скользить влево, потому что ограничения сохраняются, даже тогда Видимость вида установлена на GONE
. Space
имеет свой вес, установленный в 0.5
, и займет правую половину пробела.