Любой атрибут с префиксом layout_
является частью объекта LayoutParams
. LayoutParams - это особые аргументы родительского представления о том, как оно должно планировать дочернее представление. Тип LayoutParams, который вы устанавливаете в представлении, зависит от того, к какому типу ViewGroup вы добавляете его. Каждый тип представления контейнера может быть различным, как и LayoutParams. layout_weight
относится к LinearLayout, layout_below
для RelativeLayout и т. Д. layout_width
и layout_height
являются частью базовой ViewGroup LayoutParams.
Вывод из этого заключается в том, что LayoutParams не анализируются конструктором представления, они анализируются еще одним шагом, который не выполняется вашим кодом выше. (В LayoutInflater используется метод родительской ViewGroup generateLayoutParams
.)
Поскольку LayoutParams зависят от предполагаемого родителя представления, не рекомендуется помещать LayoutParams в стили. Он в основном работает, когда вы надувает представления из макета XML, но имеет другие последствия, подобные крайнему случаю, который вы нашли здесь, и требует, чтобы вы знали о них. Например, стиль может указывать layout_weight
для LinearLayout, но если вместо этого представление с этим стилем добавляется в RelativeLayout, оно не будет вести себя так, как ожидается, поскольку RelativeLayout не поддерживает layout_weight
.