Подтвердить что ты не робот

Когда будут применяться MeasureSpec.UNSPECIFIED и MeasureSpec.AT_MOST?

Я немного запутался в MeasureSpec.UNSPECIFIED и MeasureSpec.AT_MOST. Я знаю, что когда match_parent или постоянное значение измерения установлено на layout_width или layout_height, при измерении вида будет применяться MeasureSpec.EXACTLY.

Затем, как насчет MeasureSpec.UNSPECIFIED и MeasureSpec.AT_MOST?

Я понимаю, что когда layout_width или layout_height установлено значение wrap_content, будет применено MeasureSpec.UNSPECIFIED, потому что wrap_content означает, что высота или ширина представления могут быть любого размера в зависимости от содержимого, Но многие статьи говорят, что wrap_content означает MeasureSpec.AT_MOST. Поэтому я смущен. Я не знаю, когда следует применять MeasureSpec.AT_MOST.

4b9b3361

Ответ 1

Базовое определение размера представления выглядит следующим образом:

MeasureSpec.EXACTLY - представление должно быть именно таким количеством пикселей независимо от того, насколько он действительно хочет быть.

MeasureSpec.AT_MOST - вид может быть такого размера или меньше, если он будет меньше.

MeasureSpec.UNSPECIFIED - Вид может быть любого размера, который должен быть, чтобы показать контент, который должен показать.

MeasureSpec.AT_MOST будет применен к представлениям, которые были установлены на WRAP_CONTENT , если родительский вид связан с размером. Например, ваш родительский вид может быть привязан к размеру экрана. Это дети также будут связаны с этим размером, но это может быть не так уж и много. Таким образом, родительское представление установит MeasureSpec как AT_MOST, который сообщает ребенку, что он может находиться где угодно между 0 и размером экрана. Ребенок должен будет внести коррективы, чтобы убедиться, что он соответствует границам, которые были предоставлены.

В особых случаях оценки не имеют значения. Например, a ScrollView. В случае ScrollView высота дочерних представлений не имеет значения. Таким образом, он предоставит UNSPECIFIED детям Views, которые рассказывают детям, что они могут быть такими высокими, какими они должны быть. ScrollView будет обрабатывать чертеж и место размещения для них.

Ответ 2

A MeasureSpec инкапсулирует требования к макету, переданные от родителя к дочернему. Каждый MeasureSpec представляет собой требование для ширины или высоты. A MeasureSpec состоит из размера и режима. Существует три возможных режима:

РАЗНЫЕ

The parent has not imposed any constraint on the child. It can be whatever size it wants. 

ТОЧНО

The parent has determined an exact size for the child. The child is going to be given those bounds regardless of how big it wants to be. 

AT_MOST

The child can be as large as it wants up to the specified size. 

MeasureSpecs реализованы как ints для уменьшения распределения объектов. Этот класс предоставляется для упаковки и распаковки кортежа в int