Как да осмислим многото оформления на Android

Линеен, Относителен, Ограничение, Таблица, Рамка и така нататък и т.н. Приложенията за Android имат цял ​​куп оформления, от които да избирате, когато искате да проектирате приложението си. Въпросът е кой е най-добрият?

Преди да влезем в подробности за различните оформления, първо ще разгледаме йерархията на обекта на изглед и процеса на рисуване на Android.

Преглед и ViewGroup

Мислете за ViewGroup като родителски клас за всеки изглед, а също и за базовия клас за оформления. Той представлява обект, който е контейнерът за други изгледи. Например LinearLayout е ViewGroup, тъй като може да съдържа изгледи и други оформления.

View, от друга страна, е основният градивен елемент на потребителските интерфейси. Изгледите могат да бъдат част от ViewGroup. Например TextView е изглед .

Мярка -> Оформление -> Рисуване -> Повторение

Оформленията се записват като XML файлове в Android. Но как те се преобразуват в обектите, които виждаме на екрана? Всеки XML файл се инстанцира (чете се: напомпа) и се формира дърво на йерархията на изгледа. Това означава, че ако имате оформление B, което е вложено в оформление A, те ще имат връзка дете-родител (оформление A е родител на оформление B). След като дървото се формира, има 3 фази, които ще се случат: Мярка, Оформление и Рисуване. Всяка от тези фази пресича дървото по ред за дълбочина първо търсене.

Измерете

В първата фаза всеки родителски възел изчислява определени ограничения, които децата му имат по отношение на техния размер. Той предава тези ограничения надолу на своите деца, където всяко дете ще прецени собствения си размер (колко голям иска да бъде) и ще вземе предвид ограниченията, които му е дадено, и ограниченията на своите деца.

Оформление

Тук всеки възел ще реши окончателния размер и позицията на всяко от своите деца на екрана.

Рисувам

Започвайки от кореновия възел, който се рисува, той казва на децата си да се нарисуват. По този начин се случва родителят да бъде изтеглен и децата му да бъдат изтеглени отгоре.

Имайки предвид горния процес, трябва да се опитате да запазите оформлението на приложението си възможно най-плитко, за да намалите времето, необходимо за пресичане на йерархията на изгледа

Разбивка на оформленията

Линейна

Организира своите деца подред с ориентация вертикално или хоризонтално. Това означава, че изгледите ще бъдат или всички в един ред или в една колона. Можете да посочите посоката, като използвате атрибута android: ориентация .

Една интересна характеристика на линейното оформление е атрибут layout_weight . Това се използва, за да се каже на Linear Layout как да се раздели пространството между дъщерни изгледи. Полезно е, когато искате оформлението ви да е съвместимо между устройствата и ориентациите.

Да приемем, че сте искали първият 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.