Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Логика xml-gui-атрибутов

#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 в которых они размещены(являются дочерними по отношению к ним)

Комментариев нет:

Отправить комментарий