![](https://habrastorage.org/storage2/be8/6b9/937/be86b9937d8e683029510fb48d685582.png)
Вчера, немного поматерясь, мной таки был сделан релиз HoloEverywhere 1.5.
Для тех, кто не в курсе: HoloEverywhere — бекпорт Holo темы с Android 4.1 на 2.1 и выше. Да и не только темы.
Нововведенний достаточно много, краткий список под катом.
- Изменена лицензия с MIT license на LGPLv3.
Нет, вы не должны открывать код приложения при использовании HoloEverywhere.
Вы должны открыть код библиотеки, только если вы изменили ее - Поддержка вложенных фрагментов неограниченного уровня (в том числе и через xml)
- Устранена ошибка в поведении Spinner, когда тот при малой высоте экрана мог не давать прокрутить попап список до конца
- Исправлено поведение PreferencePanel на больших экранах
- Раз уж заговорили про Preferences — они отделены в отдельный модуль, теперь они не в ядре библиотеки
- Ага, модули. Полностью переписана система модулей, хотя логика осталась старой
- Официальная поддержка RoboGuice (правда, из-за бага в коде RoboGuice с один велосипедом, смотрите вики)
- Мне в конец надоело разбиратся с ключами (keys) в preference framework. Поэтому я добавил поддержку id, как в layout:
Пример<SwitchPreference holo:id="@+id/mypreference" holo:text="Text" />
Хотя, это было еще в 1.4.2, но рассказать для «непосвященных» решил только сейчас. - Теперь ThemeManager может генерировать для вас собственные флаги, не только встроенные в HoloEverywhere. Этот прием используется в Preference addon для резолва темы для вьюх.
- Ну и заодно: .Wallpaper темы и соответсвующий флаг в ThemeManager
- Существенно улучшен LayoutInflater, теперь можно не регистрировать каждую вьюху по отдельности, а зарегистрировать весь java-package.
- Уменьшен размер элементов списка в PopupMenu (был указан аттрибут не того размера)
- Кеширование requestWindowFeature до того момента, как будут подключены все модули к Активити. Сделано для обеспечения обратной совместимости кода
- После вызова super.onCreate или ручной инициализации активити посредством Activity#forceInit теперь нельзя подключать дополнительные модули.
- Поддержка ExpandableListView
- ThemeManager сохраняет instanceState между перезапусками активити. Правда, если вы вручную работаете с savedInstanceState в on(Post)Create, то посмотрите начало метода onCreate в DemoActivity. Иначе работать не будет.
- Activity#setTheme теперь может принимать бинарный сет от ThemeManager (что-то типа setTheme(ThemeManager.MIXED | ThemeManager.FULLSCREEN)
- Удален аццкий велосипед из ProgressBar, который подменял системные Drawable's на наши. DrawableCompat
- Немного улучшен RingtonePreference
- Теперь инстанс приложения всегда должен наследовать (или указан напрямую) от org.holoeverywhere.app.Application. Я решил, что проще сделать так, чем доказывать каждому второму, почему у него все время креши и разногласие в данных.
- Activity#getSupportMenuInflater() при Mixed теме использует Dark тему, выборку которой он перекладывает на плечи ThemeManager
- Fragment.instantiate(Context, String) устаревший, используйте Fragment.instantiate(Class<Fragment>)
- Исправлено поведение DialogFragment.findInstance при makeIfNeed = true
- ButtonBehavior для AlertDialog — позволяет выключить автоскрытие диалога после нажатия на кнопку в button bar
- Исправлен двойной вызов DialogFragment#onCreateDialog
- Ну и еще по всякой мелочи
По традиции, скриншоты демо приложения (хотя они и малую долю не показывают):
Cкриншоты![1](http://holoeverywhere.org/img/screenshots/1.png)
![2](http://holoeverywhere.org/img/screenshots/2.png)
![3](http://holoeverywhere.org/img/screenshots/3.png)
![4](http://holoeverywhere.org/img/screenshots/4.png)
![5](http://holoeverywhere.org/img/screenshots/5.png)
![6](http://holoeverywhere.org/img/screenshots/6.png)
![7](http://holoeverywhere.org/img/screenshots/7.png)
![8](http://holoeverywhere.org/img/screenshots/8.png)
![9](http://holoeverywhere.org/img/screenshots/9.png)
![10](http://holoeverywhere.org/img/screenshots/10.png)
![1](http://holoeverywhere.org/img/screenshots/1.png)
![2](http://holoeverywhere.org/img/screenshots/2.png)
![3](http://holoeverywhere.org/img/screenshots/3.png)
![4](http://holoeverywhere.org/img/screenshots/4.png)
![5](http://holoeverywhere.org/img/screenshots/5.png)
![6](http://holoeverywhere.org/img/screenshots/6.png)
![7](http://holoeverywhere.org/img/screenshots/7.png)
![8](http://holoeverywhere.org/img/screenshots/8.png)
![9](http://holoeverywhere.org/img/screenshots/9.png)
![10](http://holoeverywhere.org/img/screenshots/10.png)
Репозиторий проекта