Вот признайтесь: читая Android Interface Guidelines, вам не приходила мысль, что это все, конечно, офигенно, но на старые (2.3 <) Андроиды приходиться перелопачивать половину стилей, чтобы смахивало на Holo интерфейс?
Или так: в последнем Андроиде есть ну просто офигенная фича, а вам вот нужно ее использовать?
Самое первое, что приходит на ум: ActionBar и ActionBarSherlock.
ABS — это замечательно, но одним ActionBar не отделаешься. Мы хотим Holo тему, а не только Holo бар, блин.
Эх, такой привлекательный ActionMode на списках чего стоит…
Позвольте представить вам HoloEverywhere — проект, целью которого является портирование Holo стиля, Holo виджетов и других фишек на Android 1.6 и старше.
Все эти скриншоты сделаны на Android 2.1 (минимальная версия Андроида для ABS, но HoloEverywhere работает и на 1.6 с отключением ABS).
Собственно, что уже сделано:
- Стилизованы многие виджеты, такие как Button, ToggleButton, RadioButton, CheckBox, Spinner, (Multi)AutoCompleteTextView, RatingBar, ProgressBar, SeekBar и другие производные. Так-же есть и портированные: Switch, NumberPicker, CalendarView, DatePicker, TimePicker
- Портирован AlertDialog, ProgressDialog, стилизован обычный Dialog (к сожалению, внутренности AlertDialog слишком закрыты для простого портирования темы, пришлось тянуть весь его код и создавать несовместимую со стандартным AlertDialog версию)
- Портирован весь Preference Framework, создан SupportSharedPreferences, который умеет писать различные Set и JSON объекты/массивы (это уже как плюшка :))
- Небольшой
велосипедпомощник для переключения тем для Activity - Везде используется
еще один велосипедсвой LayoutInflater, который может инфлейтить ваши вьюхи по короткому имени. Например, раньше вы писали так:
<com.myapppackage.widgets.MySuperView ... />
А теперь, если на старте приложения вызвать правильный метод с правильными параметрами, вы можете писать просто MySuperView, и это будет работать везде, где используется HE (в рамках текущего приложения, естественно).
Из этого так-же следует, что вы можете подменить системные виджеты на свои, абсолютно не меняя разметок, в том числе и системных. Но если виджеты создаются из кода — тут уж ничего не поделаешь. - Собственно, ActionMode, про который я упоминал в начале поста. Дополненная реализация ListView, позволяет стартовать ActionMode из ABS
Репозиторий проекта: github.com/ChristopheVersieux/HoloEverywhere
Там-же инструкция по подключению к проекту.
В принципе, пока все, но вы можете помочь проекту — либо самым прямым путем (форкнуть проект, дополнить, отправить pull request), либо открыть feature request с описанием новой фичи, либо отправить письмо мне в личку, в конце-концов :)
Автор: Prototik