Пользовательские Макеты. Часть 2. Celllayout

Еще раз здравствуйте, коллеги.

И снова я пришел к вам с темой кастомной разметки.

На этот раз я решил сделать своеобразную «ячеистую» разметку.

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

С помощью такой разметки можно создать красивую мозаику из кнопок или картинок, не прибегая к многочисленным вложенным макетам.

И, поскольку это макет, специально созданный для этих целей, работать он будет очень быстро.



Пользовательские макеты.
</p><p>
 Часть 2. CellLayout



Дочерние свойства
Прежде чем мы приступим к нашей основной задаче по измерению и позиционированию детей, нам нужно определить, какими свойствами они будут обладать.

Каждый из наших потомков будет обладать следующими свойствами:

  1. left — левая ячейка
  2. верх - верхняя ячейка
  3. cellWidth — количество горизонтальных ячеек
  4. cellHeight — количество вертикальных ячеек
Давайте определим эти свойства в xml:
  
   

<resources> <declare-styleable name="CellLayout"> <attr name="columns" format="integer" /> <attr name="spacing" format="dimension" /> <attr name="layout_left" format="integer" /> <attr name="layout_top" format="integer" /> <attr name="layout_cellsWidth" format="integer" /> <attr name="layout_cellsHeight" format="integer" /> </declare-styleable> </resources>

Мы также определили глобальные свойства нашего макета — количество столбцов ( столбцы ) и заполнение внутри ячейки ( расстояние ).



LayoutParams

Что ж, давайте начнем.

Давайте создадим преемника ViewGroup, назовем его CellLayout. Первое, что мы хотим сделать, — это наши LayoutParams, которые будут содержать ранее определенные атрибуты и которые будут назначены всем потомкам нашего контейнера.

LayoutParams — это специальный контейнер атрибутов, который передается каждому дочернему элементу контейнера.

Каждый контейнер может определять свои собственные нестандартные атрибуты для дочерних элементов (например, RelativeLayout представляет множество атрибутов Layout_*, доступных для дочерних элементов, таких как Layout_toLeftOf).

Таким образом, каждый тип контейнера может расширять базовый набор.

Базовый набор реализован в ViewGroup.LayoutParams(layout_width, Layout_height).

Кроме того, есть немного расширенная опция — MarginLayoutParams, добавляющая поля.



public static class LayoutParams extends ViewGroup.LayoutParams {

Теги: #Android #макет #менеджер макетов #пользовательский вид #утиные истории #разработка для Android

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.