#xml #наследование #android #gui
Казалось бы, в написании GUI с помощью XML нет ничего сложного. Ищем в Reference классы, наследуемые от View, записываем их в иерархическом порядке, и инициализируем нужные свойства, которые опять же прописаны в документации каждого класса. Но, например, свойство android:layout_weight не является параметром TextView, однако добавляется туда, если его предком является TextView.Мой вопрос: по какому принципу происходит подобное наследование, как отличать наследуемые параметры от ненаследуемых, и существуют ли ещё какие-нибудь неочевидные моменты в написании GUI с помощью XML?
Ответы
Ответ 1
При добавлении вьюшки куда-нибудь из кода, вы используете специфичные для лэйаута LayoutParams: // грубо relativeLayout.addView(myView, new RelativeLayout.LayoutParams(...)); Т.е. кроме параметров самого view вам нужно использовать еще параметры лэйаута контейнера, в который вы его добавляете. (в случае одноаргументного addView(View view) используются дефолтные параметры) Парсер xml-ек при генерации байт-кода сделает то же самое: если вьюшка находится в RelativeLayout, в ее тэге могут быть аттрибуты для RelativeLayout.LayoutParams. Если вы их там указали - он создаст LayoutParams с вашими атрибутами, если нет - будет использовать дефолтные. Итак: Наследования никакого нет, просто логика описания лэйаутов в xml и в коде немного отличается. Все параметры LayoutParams любого ViewGroup (LinearLayout, RelativeLayout) в xml могут добавлятья в тэг наследника. Нет железного способа отличить параметры child от параметров лэйаута parent "на ходу". Но и надобности тоже нет. Параметры задокументированы (LinearLayout.LayoutParams) Выбирая лэйаут, вы решаете какую-то задачу, а значит, вы знаете, какие параметры лэйаута вы хотите использовать, вряд ли вы их спутаете с параметрами вьюшки. Через пару месяцев работы с лэйаутами вы будете знать их наизусть :)Ответ 2
Ответ: компоненты, такие как TexView имеют свои атрибуты + атрибуты, наследуемые от лэйаутов(менеджеров компоновки) таких как LinearLayout в которых они размещены(являются дочерними по отношению к ним)
Комментариев нет:
Отправить комментарий