Выложил datepicker для Android

Written by elwood

Ссылка на проект в Bitbucket: https://bitbucket.org/igor_kostromin/android-wheel-datepicker
Контрол был написан для того, чтобы можно было удобно выбирать дату рождения. Выглядит он вот так:

datepicker

Поддерживаются 2 локали: английская (дефолтная, “en-US”) и русская (“ru-RU”). По сути, это был эксперимент на тему того, можно ли по-простому выделять куски xml-layout в отдельные user control’ы по аналогии с тем, как это принято в WPF. Оказалось, что это довольно просто, но к сожалению, нужно вручную создавать классы и разметку, причем эта разметка ничем не отличается от разметки обычных view, и перемешивается в папке layouts. То же самое и с идентификаторами элементов управления, хотя, тут наверное есть способ выносить их в отдельные ids.xml файлы, но опять же – придется всё это делать ручками, и потом при необходимости использовать такой контрол в другом проекте нужно будет копировать файлы из разных директорий и следить за тем, чтобы ничего не потерялось. В общем, можно, но неудобно. Хотелось бы нативной поддержки этого механизма аналогично тому, как это сделано в Windows Presentation Foundation. Напомню, там есть класс UserControl – базовый для всех таких compound control’ов (то есть состоящих из других контролов – в терминологии android-разработки) и его можно описывать в XAML, а потом включать его в другие XAML-файлы, причем идентификаторы дочерних элементов хранятся там же. Как правило, такие контролы помещаются целиком каждый в свою папку, и скопировать их для реюза очень просто.

Из технического – что можно было бы улучшить конкретно в этом элементе управления.
1) Добавить возможность задавать специфические свойства этого контрола в XML (Day, Month, Year, VisibleItems)
2) Убрать некоторые свойства, доставшиеся от базового LinearLayout (например, Orientation, которую мы всегда устанавливаем в Horizontal), чтобы их нельзя было задать как в XML, так и в коде
3) Проверить поведение контрола в более сложных сценариях размещения – когда от него ожидают заполнения всей доступной области по горизонтали / вертикали, или доступный размер меньше необходимого.