Предыдущая версия моего вопроса была слишком многословной. Люди не могли понять это, поэтому следующее полное переписывание. Если вы заинтересованы в старой версии, просмотрите историю изменений.
РодительA RelativeLayout
отправляет MeasureSpec
s в свой метод просмотра child onMeasure
, чтобы увидеть, насколько большой будет ребенок как быть. Это происходит в нескольких проходах.
Мое пользовательское представление
У меня есть пользовательский вид. По мере увеличения содержимого представления высота представления увеличивается. Когда представление достигает максимальной высоты, которую разрешает родитель, ширина представления увеличивается для любого дополнительного контента (если для ширины выбран wrap_content
). Таким образом, ширина пользовательского представления напрямую зависит от того, какой родитель говорит, что максимальная высота должна быть.
Беспорядочный родительский разговор с родителями
onMeasure
передать 1
Родитель RelativeLayout
сообщает моему представлению: "Вы можете быть любой шириной до 900
и любой высоты до 600
. Что вы скажете?"
В моем представлении говорится: "Ну, на этой высоте я могу поместить все с шириной 100
. Поэтому я возьму ширину 100
и высоту 600
."
onMeasure
пройти 2
Родитель RelativeLayout
указывает мое мнение: "В прошлый раз вы сказали мне, что хотите ширину 100
, поэтому поставьте это как exact Теперь, исходя из этой ширины, какой высоты вы бы хотели? Anything до 500
все в порядке. "
"Эй!" мой взгляд отвечает. "Если вы только даете мне максимальную высоту 500
, то 100
слишком узкий. Мне нужна ширина 200
для этой высоты. Но отлично, сделайте это по-своему. Я не сломаю rules (пока...). Я возьму ширину 100
и высоту 500
."
Конечный результат
Родитель RelativeLayout
присваивает виду конечный размер 100
для ширины и 500
для высоты. Это, конечно, слишком узко для просмотра, и часть содержимого обрезается.
"Вздох", - думает мой взгляд. "Почему мой родитель не позволит мне быть шире? Существует много места. Может быть, кто-то из Qaru может дать мне несколько советов".