Pull to refresh

Comments 24

UFO just landed and posted this here
Обычно условия диктует заказчик.
UFO just landed and posted this here
Individual Developer быстро обрастает инфрaструктурой и становится small team:)
UFO just landed and posted this here
А не выгодно работать с такими заказчиками: у меня был проект с функционалом на пару дней, а реализация дизайна заняла недели :(
Самое распространённое в этом плане требование заказчиков: «Как в айфоне, пожалуйста». И не поспоришь и не объяснишь =\
За «как в айфоне» надо убивать. Нет, пожалуй даже УБИВАТЬ. Вот. :(
Я стараюсь объяснить. Обычно параллельно делаю «кликалку» в «провославном Android» стиле и сразу становится понятно где добро а где зло =). Геморно, но так на Play Market будет больше «правильных» программ а не портов с iOS.
Откуда такая ненависть к кастомным темам? У меня вон пользователи сами просят еще и еще, новых, еще новее и экстравагантнее! :)
UFO just landed and posted this here
Сами не ведают, чего хотят.
А насчет описанного выше подхода, я как-то сделал просто в onCreate назначение ресурсов в соответствии с выбранной темой. Т.е. 5 минут на размышления, кода меньше и сам он проще, а по универсальности и работоспособности — ровно столько же.
Зачем все это?)
Я не понимаю, что вы имеете ввиду под «просто в onCreate назначение ресурсов в соответствии с выбранной темой». Поэтому не могу оценить и ответить на ваш вопрос =)
Объясните мне, может я чего не понимаю, но механизм тем вам чем не угодил? Зачем городить свои велосипеды, перегружать getResources()… setTheme(), не?
Тема применяется для всего активити(приложения) в целом, отдельно до каждой вьюшки вы достучаться не сможете.Вот. Конечно можно к каждой вьюшке прописать свой стиль и в каждом активити каждой вьюшке его применять… но это тоже самое, что и просто в каждом классе перебирать вьюшки и хардкодом подставлять разные атрибуты. Ну вы сами понимаете, что это не самое удачное решение. Совсем не в стиле ООП
Тогда вы не понимаете механизма тем. К каждой вьюшке вы действительно проставляете стиль, но этот стиль делаете зависимым от темы. Таким образом, чтобы создать и применить новую тему, нужно всего лишь написать новую xml(изменения в коде — 2 строки). Мало того, что вы полностью из кода убираете внешний вид, вы еще можете с некоторыми усилиями прийти к ситуации, в которой темой сможет заниматься не программист, а дизайнер.
А как быть, например, с графическими ресурсами? Иконки тоже хочется перекрашивать в зависимости от темы
А вызывать метода reflection'ами это в духе ООП =)

Вся суть xml layout'ов в Андроиде в том, чтобы отделить View от Model (хотя конечно Activity это всё ещё View, но тем не менее). Дизайнер может что-то делать со стилями, темами, расположением элементов на экране не редактируя код, а только меняя файлы разметки. Использование механизма предложенного вами — полностью убивает данную фичу. Да, собственно, темы удобнее задавать в xml (там ещё наследование стилей работает, кстати).

В качестве примера дам ссылку на исходный код своего приложения, где используется механизм тем:
1. Моя базовая тема (наследуется от Theme.Sherlock)
2. Синяя тема «Метро» (наследуется от темы выше)
3. Layout 1, Layout 2

PS При этом в самой Activity нужно просто написать setTheme(R.theme.xxx) для выставления темы — остальное Андроид сделает сам
Это всё конечно хорошо. Но дело в том, что этот код я писала под определённую задачу. И, дело в том, что я заранее не знаю, какая у меня будет тема. Все они задаются на сервере, а мне приходят в виде джейсона, где вьюшка-атрибут-значение. И в рантайме я эту тему должна применить. Вот ещё главный нюанс. А, как известно, в рантайме сгенерировать xml я не могу… т.к. в apk файле они хранятся уже совершенно в другом виде. Так вот моё решение для тех, у кого темы — это динамические объекты, которые заранее не пропишешь в xml.
Это, кстати, многое меняет — надо было этот тезис в статье особенно выделить.
На одном из проектов стояла такая же задача. Причём необходимо было реализовать загружаемые извне скины, что не позволяло использовать механизм тем. Очевидные недостатки подхода, описываемого в статье — наследование от кастомной активити и применение механизма рефлексии. Разработанный нами подход лишён этих недостатков. Он основан на кастомной фабрике вьюшек, которую можно засетить в инфлейтер методом LayoutInflater.setFactory(). В этой фабрике в методе LayoutInflater.Factory.onCreateView() нам доступны все атрибуты создаваемого вью, а значит мы можем узнать значения background, drawableLeft/Top/Right/Bottom, textColor и другие и засетить их созданному вью из своей кастомной темы. Недостатком подхода является то, что тема автоматически применяется только если создавать вью при помощи inflater (что и делается в 95% случаев). Если вью создается программно, то требовались дополнительные телодвижения. Код, к сожалению предоставить не могу, но идея, в целом, думаю, ясна.
хорошая идея, не знал что у инфлейтера есть такая возможность.
О, тётенька-программист для Андроида.

Респектую.
Sign up to leave a comment.

Articles