пятница, 4 июля 2014 г.

fill_parent или match_parent?

Вступление

Да, что ни говори, а программирование на Java под Android - это какой-то совершенно иной мир. Помимо необычных элементов и классов, от непривычности которых мозги набекрень съезжают, то тут то там возникают ещё и различные флуктуации неустаканившихся ещё требований.

Ещё недавно я поражался сложности написания приложения, если оно пусть даже чуточку отличается от элементарного академического, а тут вдруг вводятся фрагменты, в разы усложняющие код, хотя и позволяющие адекватно отображать информацию на широких экранах планшетов.

Уж не знаю, насколько хорошо всё это продумано, и можно ли было реализовать это более эргономично для программиста, но думаю, что развитие сред программирования в будущем сможет решить и этот вопрос.

Почему я начал так издалека? Да просто при изучении программирования под Android на каждом шагу возникают какие-то попутные вопросы, которых, казалось бы, не должно быть. Так и с этими fill_parent и match_parent - постоянно забываешь, какой из них устарел. К тому же Android Studio 0.8.1 до сих пор по умолчанию вставляет устаревший вариант.

Чтобы раз и навсегда запомнить правильный ответ, я решил поглубже разобраться с этим вопросом, изучить причины переименования. Результаты моих изысканий я излагаю ниже.

fill_parent или match_parent?

До API 8 для указания размеров ширины и высоты элементов layout:width и layout:height использовалось значение  fill_parent. Это значение можно перевести, как "заполнить родителя". Такой перевод можно истолковать так, что элемент заполняет в родителе всю свободную от других элементов площадь. На самом же деле свойство fill_parent просто приравнивает размер дочернего элемента к соответствующему размеру родителя. То есть, если в родителе рядом будут другие элементы, то этот элемент просто сам выпрет наружу родителя или выпрет туда другие находящиеся в родителе элементы.

В связи с этим, начиная с API 8, значение fill_parent стало считаться устаревшим, и вместо него появилось значение match_parent. Это значение переводится, как "такой-же как у родителя", что уже точно соответствует его предназначению.

Замечу, что оба значения в представлении системы одинаковы и равны -1.

А как сделать fill_parent?

Возникает вопрос, а как же смоделировать заполнение дочерним элементом свободного места у родителя, если в нём содержаться другие дочерние элементы? Для этого свойство layout:width или layout:height устанавливается в ноль, а в свойстве layout:weight ставится единица.

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

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