Як створити прокрутне розташування, яке слідує за іншим розташуванням в Android activity

Як створити прокрутне розташування, яке слідує за іншим розташуванням в Android activity

8 Березня 2024 в 22:23 44

Проблема створення Android-розташування з прокруткою таблиці, якому слідує фіксоване розташування з кнопкою, виникає відносно часто. Деякі розробники можуть намагатися вирішити це, використовуючи ConstraintLayout і LinearLayout, але зустрічаються з труднощами, такими як зникнення LinearLayout або неправильне розташування кнопки. У цій статті ми розглянемо, як вирішити цю проблему та створити статичне рішення за допомогою лише XML-розмітки.

Мета полягає в створенні прокрутної таблиці змінної довжини, за якою завжди буде слідувати LinearLayout, що містить кнопку, розташовану внизу. Для досягнення цієї мети ми спочатку спробуємо використати ConstraintLayout, а потім розглянемо проблеми, з якими можна зіткнутися, і розв’язки для них.

У нашому випадку ми спробуємо створити макет з ConstraintLayout, який містить прокрутний TableLayout, за яким слідує LinearLayout з кнопкою. Ось спрощений код:

Проблема з цим кодом полягає в тому, що LinearLayout може зникнути, якщо таблиця стає занадто довгою, або він може залишитися недалеко від кнопки, незалежно від розміру таблиці. Одним з можливих рішень цієї проблеми є використання OnPreDrawListener для динамічного вирішення проблеми, проте ми шукаємо статичне рішення з використанням лише XML-розмітки.

Приступимо до вирішення цієї проблеми, почавши зі створення статичного рішення за допомогою ConstraintLayout і LinearLayout. Потім ми розглянемо можливі варіанти використання другорядних Layouts, таких як RelativeLayout і FrameLayout, для досягнення бажаного результату.

Щоб вирішити проблему з зникненням LinearLayout, коли таблиця стає занадто довгою, ми можемо використати атрибут layout_constrainedHeight=”true” для LinearLayout. Це забезпечить те, що LinearLayout завжди буде видимим, навіть якщо таблиця буде прокручуватися. Ось змінений код:

З цим зміненим атрибутом LinearLayout завжди буде видимим, навіть якщо таблиця прокручується, тому проблема з його зникненням вирішена. Проте є ще одна проблема: розташування кнопки. Навіть з вищезгаданими змінами, кнопка може залишатися недалеко від таблиці, а не внизу екрану.

Для вирішення цієї проблеми ми можемо скористатися атрибутом layout_constraintVertical_bias, який вказує, як далеко від вертикальної країни розташування має бути відповідний елемент. Якщо встановити цей атрибут для кнопки, ми можемо забезпечити його фіксоване розташування внизу екрану. Ось змінений код кнопки:

З використанням цього атрибуту кнопка завжди буде розташована внизу екрану, навіть якщо таблиця занадто довга. Отже, проблема з неправильним розташуванням кнопки також вирішена.

Отже, за допомогою атрибутів layout_constrainedHeight і layout_constraintVertical_bias ми змогли створити статичне рішення для прокрутної таблиці, якому слідує фіксоване розташування з кнопкою. Це дозволяє нам досягти бажаного результату, використовуючи лише XML-розмітку, без необхідності використовувати OnPreDrawListener.

Хоча існують інші можливості розв’язання цієї проблеми, використання ConstraintLayout та відповідних атрибутів є простим та ефективним способом досягнення бажаного результату.