Предыдущая версия моего вопроса была слишком многословной. Люди не могли понять это, поэтому следующее полное переписывание. Если вы заинтересованы в старой версии, просмотрите историю изменений.
Родитель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 может дать мне несколько советов".
