Странное поведение Constraint Layout при добавлении DatePicker/TimePicker
Поместил Constraint Layout внутри Scroll View для возможности скролла. Но при добавлении DatePicker (или же TimePicker) в центре появляется пустая область. Пробовал изменить высоту элемента EditText с id message, но дело оказалось не в нём. Если убрать ScrollView, то всё становится в порядке, но теряется возможность скролла. Значит, накосячил где-то с шириной/высотой, но не могу найти где.
XML файл макета:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/topText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:background="#ffebee"
android:fontFamily="sans-serif"
android:text="Hello, User!"
android:textColor="#f44336"
android:textSize="26sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Введите имя"
android:inputType="text"
android:maxLines="1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/topText" />
<EditText
android:id="@+id/message"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="16dp"
android:gravity="top"
android:hint="Введите сообщение"
android:inputType="textMultiLine|textCapSentences"
app:layout_constraintBottom_toTopOf="@+id/inputButton"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/name" />
<Button
android:id="@+id/inputButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:background="#ede7f6"
android:fontFamily="casual"
android:onClick="inputInfo"
android:text="Ввод"
android:textAlignment="center"
android:textAllCaps="true"
android:textColor="#7e57c2"
android:textSize="26sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/nameText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Name: "
android:textSize="26sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/inputButton" />
<TextView
android:id="@+id/messageText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Message: "
android:textSize="26sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/nameText" />
<TextView
android:id="@+id/checkboxText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/messageText" />
<CheckBox
android:id="@+id/checkbox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onCheckboxClicked"
android:text="Checkbox 1"
android:textSize="18sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkboxText" />
<CheckBox
android:id="@+id/checkbox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onCheckboxClicked"
android:text="Checkbox 2"
android:textSize="18sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkbox1" />
<ToggleButton
android:id="@+id/toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onToggleClicked"
android:textOff="Выключено"
android:textOn="Включено"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkbox2" />
<TextView android:id="@+id/radioText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="26sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toggle"/>
<RadioGroup
android:id="@+id/radios"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/radioText">
<RadioButton android:id="@+id/java"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Java"
android:onClick="onRadioButtonClicked"/>
<RadioButton android:id="@+id/kotlin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kotlin"
android:onClick="onRadioButtonClicked"/>
</RadioGroup>
<TextView android:id="@+id/dateTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="26sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/radios" />
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="calendar"
android:calendarViewShown="false"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dateTextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
Вот так макет выглядел до добавления DatePicker/TimePicker:
И вот так после добавления (весь остальной контент съехал далеко вниз):
Ответы (1 шт):
Нашёл ошибку. Раньше позиционировал кнопку "Ввод" по центру и забыл это убрать. И как выяснилось, если устанавливать атрибут app:layout_constraintBottom_toBottomOf=“parent”, то ScrollView будет работать неправильно. Убрал его в кнопке и всё стало выглядеть хорошо.

