Какво означава, когато родител wraps_content и дете fills_parent?

Взето от документацията за Android относно LayoutParams:

FILL_PARENT, което означава, че изгледът иска да бъде толкова голям, колкото неговия родител (минус подложката)

WRAP_CONTENT, което означава, че изгледът иска да бъде достатъчно голям, за да обхване съдържанието му (плюс подложка)

Сега, ако родителят зададе височината си на wrap_content, а детето зададе височината си на fill_parent, какво всъщност означава това? Искам да кажа, това звучи като връзка между исканията за размер: детето иска да бъде голямо колкото родителя си, но родителят иска да бъде голям колкото детето си.

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


person Matthias    schedule 05.11.2009    source източник


Отговори (1)


По принцип MeasureSpecs се отнасят за размера, а LayoutParams помага на родителския изглед да разпредели наличния размер между своите дъщерни.
Ами основно работи някак по следния начин: Предполага се ViewHierachy P0 - P1 - C0,C1 ( P за родител, C за дете)
1) P0 извиква измерване на P1 с някои MeasureSpecs (зависи от LayoutParams на P1)
2) при извикване на onMeasure на P1, P1 знае колко голям може да бъде от спецификациите на измерването, предоставени от P0
3) P1 трябва да кажете на децата техния размер въз основа на LayoutParams на всяко дете, например: Child (C0) има LayoutParams.width = "FILL_PARENT" и P1 е LinearLayout с вертикално подравняване, така че P1 може да му каже C0 дете MeasureSpec.AT_MOST с една ширина. За да определи височината на всяко дете, P1 знае: броя на децата, LayoutParams на всяко дете и гравитацията на всяко дете (ако има такова), така че да може да разпредели наличната височина между своите деца.

Надяваме се, че помага, за по-задълбочен подход можете да видите метода LinearLayout.onMeasure, той има някои коментари, които ще ви помогнат да разберете какво се случва.

person Nikolay Ivanov    schedule 05.11.2009