Як зрозуміти багато макетів Android

Лінійний, Відносний, Обмеження, Таблиця, Кадр тощо тощо. Додатки Android мають цілу купу макетів на вибір, коли ви хочете розробити свою програму. Питання в тому, який з них найкращий?

Перш ніж переходити до деталізації різних макетів, ми спочатку ознайомимося з ієрархією об’єктів подання та процесом малювання Android.

Переглянути та переглянути групу

Подумайте про ViewGroup як про батьківський клас будь-якого подання, а також про базовий клас макетів. Він представляє об'єкт, який є контейнером для інших видів. Наприклад, LinearLayout - це ViewGroup, оскільки він також може містити подання та інші макети.

З іншого боку, view - це основний будівельний елемент елементів інтерфейсу. Перегляди можуть бути частиною групи перегляду. Наприклад, TextView є View .

Виміряти -> Макет -> Малювати -> Повторити

Макети зберігаються як файли XML в Android. Але як вони перетворюються на об’єкти, які ми бачимо на екрані? Кожен файл XML отримує екземпляр (читається: завищений) і формується дерево ієрархії подання. Це означає, що якщо у вас є макет B, вкладений всередину макета A, вони матимуть взаємовідносини дочірній і батьківський (макет A є батьківським для макета B). Як тільки дерево сформується, відбуватимуться 3 фази: Вимірювання, Макет та Малювання. Кожна з цих фаз обходить дерево у порядку глибини першого пошуку.

Виміряйте

На першому етапі кожен батьківський вузол з’ясовує певні обмеження, які мають його діти щодо їх розміру. Він передає ці обмеження своїм дітям вниз, де кожна дитина оцінить власний розмір (наскільки великим він хоче бути) та враховує обмеження, які йому були надані, та обмеження своїх дітей.

Макет

Тут кожен вузол визначатиме кінцевий розмір та положення кожного з його дочірніх елементів на екрані.

Нічия

Починаючи з кореневого вузла, який малює себе, він потім каже своїм дітям намалювати себе. Таким чином, відбувається те, що батько буде намальований, а його діти будуть намальовані поверх нього.

Маючи на увазі описаний вище процес, ви повинні намагатися, щоб макет вашої програми був якомога дрібнішим, щоб зменшити час, необхідний для обходу ієрархії подання

Розбивка макетів

Лінійний

Організовує своїх дітей підряд з орієнтацією по вертикалі або горизонталі. Це означає, що подання будуть або в одному рядку, або в одному стовпці. Ви можете вказати напрямок, використовуючи атрибут android: direction .

Цікавою особливістю лінійного макета є атрибут layout_weight . Це використовується, щоб сказати Лінійному макету, як розподілити простір між дочірніми поданнями. Це корисно, коли ви хочете, щоб ваш макет відповідав пристроям та орієнтаціям.

Скажімо, ви хотіли, щоб перший TextView, що містить слово Hello, завжди займав 3/4 ширини екрана. Для цього ми можемо використовувати атрибут layout_weight.

Relative

As the name implies, this layout will set its inner child views in relative position. This can keep your layout hierarchy flat with no nested view groups. At the same time, however, each Relative Layout has to undergo a process of two Measure passes, which can impact performance.

One useful feature of a RelativeLayout is the ability to center a child view by using the centerInParent attribute.

Original text


Constraint

A constraint is a connection or an alignment to the element the constraint is tied to. You define various constraints for every child view relative to other views present. This gives you the ability to construct complex layouts with a flat view hierarchy (no nested ViewGroups). Similar to RelativeLayout, this layout also requires two Measure passes.

Frame

This layout is used only to hold a single child view, thus blocking any other view in the layout. The layout itself will be as big as its biggest child view (visible or not), plus some padding.

Avoid having several child views inside a FrameLayout since it will be difficult to avoid the child views from overlapping one another. You can control the positions of these child views by assigning the layout_gravity attribute to each child.

List View/Grid View

Use when you have a need to present several items on screen (like in a restaurant menu). List View is a single column list that the user can scroll through. You can think of Grid View as a List View with more than one column.

What is important to know about these layouts is that the Views are dynamic and created at runtime. To make the items populate at runtime, you need to use an AdapterView.

TableLayout

Very similar to Grid View, this layout arranges its children into rows and columns. Each layout will contain several TableRow objects, each defining a row.

Don’t be afraid to try different layouts until you find the one that works best for you. Feel free to let me know in the comments below which layout is most useful to you and why.