Школа Android от СберТеха

Странные вещи творятся в этом мире. Ещё вчера, казалось бы, я сам учился понемногу (когда-нибудь и как-нибудь), а теперь вот уже моему диплому исполнилось десять лет, а сам я — преподаватель Школы Android от СберТеха.

Но отнюдь не потому, что круче меня бывают уже одни лишь яйца из фабричной столовой. Вовсе наоборот: я ощущаю потребность разобраться наконец в собственных знаниях и выявить затаившиеся в них пробелы. Мне и самому неплохо бы стать учеником.

Так незамысловато (но со вкусом) выглядел слайд вводной лекции

А фокус здесь в том, что лучший способ понять тему глубже — начать учить ей других. Знания, — одна из немногих вещей, умножающихся в процессе передачи. Если, конечно, обучаемая сторона готова их принимать. А в этом вопросе мне повезло.

Читать далее

Шпаргалка по material-интерполяторам

В гайдах Material Design по анимациям первым же пунктом прописано требование к «authentic motion», т.е. к живому, не-механистичному движению объектов на экране. В частности просят «natural acceleration and deceleration»; в общем, речь в первую очередь идёт об интерполяторах.

В support-библиотеке уже содержится три самых необходимых класса: FastOutLinearInInterpolator, FastOutSlowInInterpolator и LinearOutSlowInInterpolator. Однако я до сих пор регулярно в них путаюсь, а лаконичные описания из документации…

Uses a lookup table for the Bezier curve from (0,0) to (1,1) with control points: P0 (0, 0) P1 (0.4, 0) P2 (1.0, 1.0) P3 (1.0, 1.0)

…навевают некоторое уныние и стойкое ощущение себя гуманитарием.

Потому я просто оставлю здесь краткую шпаргалку: кто есть кто и когда кого использовать.

Читать далее

isUserAGoat(): шутка Google

Среди встроенных в Android SDK инструментов автоматизированного тестирования есть небольшая утилитка monkey. Это своего рода симулятор бешеной обезьяны, которой попал в лапы смартфон с запущенным приложением: утилита генерирует мощный поток случайных тычков, жестов и нажатий кнопок. Если приложение в таком режиме не рухнуло и не зависло, то сей факт уже говорит о некотором качестве.

Боевой Бибизян
Что ломать изволите?

При этом самому тестируемому приложению оставлена возможность определить запуск monkey с целью подтасовать результаты. Шутка: с целью предотвратить излишние последствия при таком тестировании, разумеется. Скажем, файловый менеджер может перед удалением каталога проверить: а человек ли требует выполнить эту операцию? Если до удаления случайно дотыкалась автоматическая обезьяна, то лучше этого всё же не делать. Отвечает за проверку статический метод isUserAMonkey() класса ActivityManager, но документирован он плохо.

Читать далее

To log, or not to log: включаем и отключаем LogCat для debug-версии

Сразу скажу, эта заметка — сборник простых и полезных рецептов, ничего более. Пожалуй, стоит даже отнести её к советам для новичков, потому что бывалые разработчики давно уже сделали для себя нечто подобное. Речь идёт о возможности автоматически отключать лишний вывод в LogCat для release-версии приложения. Или, выражаясь иначе, о возможности добавить больше отладочного вывода в debug-режиме, да ещё и получить поддержку со стороны IDE.

Необходимость подобного решения очевидна: debug-версии часто выкидывают в LogCat кучу полезной для разработчика информации, которую в релизе лучше бы скрыть подальше от любопытных глаз. И даже если прятать нечего, загаживать лог в любом случае нехорошо.

Android и его LogCat
Честно утянутая лучшая картинка по запросу LogCat

Решение состоит из двух подзадач: первая — определение наличия отладочного режима в приложении, вторая — написание вспомогательного логгера и добавление его поддержки в IDE.

Читать далее

Material Drawer: новые материалы от Google

«Всё течёт, всё меняется» — говорил когда-то Гераклит Эфесский. И если течь в наших программах вообще-то ничего не должно, то уж меняться им в любом случае приходится постоянно. Правила нашего айтишного зазеркалья никто не отменял: «нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее».

Казалось бы, прошло совсем не так уж много времени с момента написания прошлой заметки про DrawerLayout, но Google уже успел выпустить новые требования к оформлению приложений, известные как Material Design. Дизайнерам и пользователям Материал явно пришёлся по вкусу, а потому придётся ему соответствовать.

SlidingDrawer в Material на примере Gmail
SlidingDrawer в Material на примере Gmail

Собственно, на скриншоте можно увидеть все новые требования к drawer-ам:

  1. Панель должна открываться поверх action bar (а не под ним, как ранее)
  2. Панель должна «подъезжать» под status bar на Lollipop и выше.

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

Читать далее

Talkback на custom view: заставляем Android читать что угодно

Android Talkback свалился на меня неожиданно. Сказал бы даже — я совершенно внезапно узнал о его существовании.

Вроде бы совсем недавно всех устраивал один из кастомных контролов в нашем Android-приложении (унаследованный напрямую от View и рисующийся, соответственно, вручную), как вдруг однажды эта идиллическая картина была единым махом разбита в прах жалобой от незрячего пользователя: у него не работает Talkback.

Одно движение — и Talkback включится
Одно движение — и Talkback включится

Откровенно говоря, слово «Talkback» я узнал только из багтрекера, читая задачу «срочно починить!». Потому что если человек может видеть хотя бы в очках, то никогда не включит эту функцию и даже не задумается о ней. Talkback — инструмент Android Accessibility, средство для чтения с экрана, позволяющее тыкать пальцами в самом прямом смысле вслепую. Механический голос вполне нормально зачитывает текст со встроенных в систему контролов (Button, TextView, WebView и т.д.), но вполне естественно, что полностью кастомный View ему представляется чёрной дырой.

Читать далее

Пользуйтесь смартфоном как смартфоном

Смартфоны уже настолько давно и настолько прочно вошли в нашу жизнь, и стали до такой степени повседневны, что даже само слово «смартфон» начинает постепенно исчезать. Забавно вспомнить: ведь ещё недавно такое понятие было очень модным, и производители старались нацепить гордую приставку «смарт» на любую звонилку с парочкой дополнительных функций… А сегодня самые современные модели, которые в те времена не приснились бы даже футурологам, всё чаще зовут скромно — просто телефонами. Ну, такой вот он есть — современный телефон.

Современный телефон, без намёков
Современный телефон, без намёков

И тем удивительнее, что множество обладателей подобных аппаратов, даже весьма активных их пользователей, не вполне понимают самую суть этих устройств, всю изначальную идею. Для одних «смартфон» — это когда тыкаешь пальцем не физические, а нарисованные кнопочки. Для других — это телефон, на котором ещё инстаграм и много игр. Для третьих это вообще лишь дорогой элемент статуса, примерно как в анекдоте про дизайнерские галстуки: «За пять тысяч взял?! Ты лох что ли?! У меня точно такой же за пятнадцать!». В общем, с немалым изумлением я выяснил, что не-технарям далеко не всегда доступна простая истина:

Смартфон — это не тачскрин и Angry Birds, смартфон — это «облака» и синхронизация данных!

Потому я и постараюсь в доступной форме эту мысль разжевать.

Читать далее

DrawerLayout: панели справа и слева одновременно

В недавней статье про DrawerLayout была мельком упомянута возможность сделать сразу две выезжающие панели — справа и слева, по образу и подобию клиента Google+ и ряда других приложений.

Правая панель в Google+
Правая панель в Google+

В качестве финальной, третьей части цикла статей (вторая часть была про скрещивание DrawerLayout и ActionBarSherlock) мы попробуем повторить в точности такое же поведение двух разных панелей на экране.

Читать далее

DrawerLayout и ActionBarSherlock: скрестить ужа и ежа

Многие знают, что у проекта ActionBarSherlock некоторое время назад появился официальный конкурент от Google: 18-я версия Android Support Library среди прочих плюшек принесла и долгожданный ActionBar в режиме совместимости.

Похоже, под закат линейки 2.x Корпорация Добра всё-таки признала необходимость хоть какого-то единообразия внешнего вида приложений; раньше официальная позиция фактически сводилась к требованию писать две программы, с action bar-ом и без него. Естественно, Шерлок на фоне такого маразма быстро взлетел в топы используемых библиотек, а его автор, — Jake Wharton, — стал широко известным в узких кругах человеком. Но есть ли смысл отказываться от ActionBarSherlock сейчас?

Нет. Нет смысла.

Читать далее

DrawerLayout: панелька из Гугла

Похоже, Google всё серьёзнее берётся за унификацию внешнего вида и поведения приложений под Android. Нет, серьёзных репрессивных мер пока что не ожидается, но правилами Google Play с недавнего времени жёстко запрещён вносящий путаницу софт (и, хвала богам, AirPush тоже наконец-то!), а раздел Design на Android Developers регулярно пополняется новыми подробными рекомендациями. И не просто теоретическими, а подкреплёнными набором инструментов для разработчиков!

DrawerLayout в действии
DrawerLayout в действии, демо-приложение

Одним из рекомендуемых (и уже знакомых) подходов к построению интерфейса является Navigation Drawer — панелька, выезжающая сбоку по нажатию на action bar или по свайпу с края экрана. Для её реализации готовы все технические средства, и написан официальный мануал разработчика, — но, пожалуй, слишком многословный и при этом не затрагивающий ряда тонкостей. Потому здесь я попробую исправить этот недочёт.

Читать далее