Жизнь без Google
2 поста
2 поста
Привет, земляне!
Сразу прошу прощения за столь долгое отсутсвие. В качестве оправдания могу сказать, что меня загрузили на работе по самое нехочу, плюс все это в предверии отпуска, который я совмещаю с будущим предложением руки и сердца той, которая терпит полуночника / полупрограммиста.
В прошлый раз мы вели разговор про обновленный компонент Tabs (Вкладки). Сегодня, как и обещал, я расскажу про умный поиск в приложении, по вводу первых символов. В качестве примера, буду использовать собственное приложение для просмотра сериалов. Полетели!
Для затравки, я покажу пример того, что будет достигнуто в этом посте:
Итак, перед вами - предиктивный поиск элементов, среди массива списка(ов). Проще говоря, система определяет наиболее подходящий вариант из поискового запроса, которые мы ей указываем.
Что это дает? Ускоренный поиск повышает юзабилити в приложении, решает возможности встроенных библиотек, которые теперь нет нужды использовать, плюс это все завернуто в строке Toolbar, и классно выглядит. Пример на обновленном устройстве выглядит так:
Как можно узреть, нам дается список из сериалов, и по вводу первых символов нам предлагается наиболее подходящий результат. Если ввести слово, которое отсутствует среди массива, мы ничего не увидим, так как я не знаю сериала гладиолус. И приложение тоже.
Давайте залезем в студию, и посмотрим, как это делается. Создаем Basic Activity
После того, как мы создали активность, нам необходимо реализовать список. Для этого мы объявляем компонент ListView, указываем его местонахождение в слое, и присваиваем значения для элементов.
DANGER! Не повторяйте описанный мной способ реализации строк в коде - это неправильно, используйте файл strings. Сейчас, обновляя приложения для стран, кроме России, я лью слезы, и все переделываю.
После того, как мы отобразили список в нашей активности, мы реализуем кнопку в Toolbar - именно нажатие по ней вызывает необходимый код для поиска.
Описывать тут практически нечего, мы объявляем компонент searchManager, который в свою очередь возвращает значение в методе onQueryTextChange(String s).
То есть, если в добавок к этому коду, добавить Toast, то при каждом вводе нового символа мы будем видеть всплывающую подсказку. Или что то другое, если у вас появиться необходимость проапгрейдить этот метод.
Осталось разобраться, как мы реагируем на клик из списка, который мы заполнили. Вначале, объявим адаптер, и назначим слушатель:
Опять таки, я не рекомендую использовать именно такой код, так как он сильно нагружает ЦП (центральный процессор) на вашем маленьком смартфоне. Почему?
Представим, что в списке 20 элементов. Такая функция, как сравнение текста
if (((TextView) view).getText() == "Сверхъестественное")
заставляет перебрать все значения их этого списка. В нашем случае, это не страшно, ну а если элементов штук 500? Приложение просто отвалится на старых девайсах, а на современных затупит. Я предлагаю (и именно так сейчас переделываю) использовать фиксированные значения для списка.
if (position == 4) {
В таком случае ничего не потеряется.
Друзья! Спасибо за то, что дочитали до конца. В связи с обновлением на Pikabu, было создано сообщество Android Developers, куда я предлагаю вступить заинтересованным личностям. Все посты теперь будут публиковаться там.
Также, я совсем забыл упомянуть о ништяках для людей, которые помогали мне в этом посте. Я про вас не забыл! На вашу почту скоро упадет обновленное приложение, и личная благодарность за то, что откликнулись на мой месадж.
В следующий раз пост будет красочнее, так как мы поговорим о библиотеке для загрузки/отображения изображений.
P.S. мои дорогие подписчики! Если я начал выкладывать котиков, значит школота интеллигенция портала жестом однокнопочного рукоблуда руки поставила минусы, и я восполняю баланс в мире =)
Серия познавательных (и полезных) материалов о тонкостях настройки, компиляции и дизайна приложений на Android.
В освещении несколько тем:
Дизайн -
http://pikabu.ru/story/material_design__pora_obnovlyatsya_4156400
http://pikabu.ru/story/material_design__pora_obnovlyatsya_chast_2_4172654
http://pikabu.ru/story/material_design__pora_obnovlyatsya_chast_3_4178810
http://pikabu.ru/story/material_design__pora_obnovlyatsya_chast_4_4198359
http://pikabu.ru/story/material_design__pora_obnovlyatsya_chast_5_4215136
Программирование -
http://pikabu.ru/story/programmiruem_mobilnyiy_spravochnik_chast_1_maketyi_4032797
http://pikabu.ru/story/programmiruem_prilozhenie_pikabu_dlya_android_chast_5_dizayn_4014466
http://pikabu.ru/story/programmiruem_prilozhenie_pikabu_dlya_android_chast_4_4001359
http://pikabu.ru/story/kak_smotret_pikabu_v_telefone_bez_reklamyi_chast_3_3988916
http://pikabu.ru/story/kak_smotret_pikabu_v_telefone_bez_reklamyi_chast_2_3969264
http://pikabu.ru/story/zadolbalo_ili_kak_smotret_pikabu_v_telefone_bez_reklamyi_3942031
Тестирование -
http://pikabu.ru/story/liga_pomoshchi_nuzhnyi_testeryi__pechenka_4181566
Серия познавательных (и полезных) материалов о тонкостях настройки, компиляции и дизайна приложений на Android.
В освещении несколько тем:
Дизайн -
http://pikabu.ru/story/material_design__pora_obnovlyatsya_4156400
http://pikabu.ru/story/material_design__pora_obnovlyatsya_chast_2_4172654
http://pikabu.ru/story/material_design__pora_obnovlyatsya_chast_3_4178810
http://pikabu.ru/story/material_design__pora_obnovlyatsya_chast_4_4198359
http://pikabu.ru/story/material_design__pora_obnovlyatsya_chast_5_4215136
Программирование -
http://pikabu.ru/story/programmiruem_mobilnyiy_spravochnik_chast_1_maketyi_4032797
http://pikabu.ru/story/programmiruem_prilozhenie_pikabu_dlya_android_chast_5_dizayn_4014466
http://pikabu.ru/story/programmiruem_prilozhenie_pikabu_dlya_android_chast_4_4001359
http://pikabu.ru/story/kak_smotret_pikabu_v_telefone_bez_reklamyi_chast_3_3988916
http://pikabu.ru/story/kak_smotret_pikabu_v_telefone_bez_reklamyi_chast_2_3969264
http://pikabu.ru/story/zadolbalo_ili_kak_smotret_pikabu_v_telefone_bez_reklamyi_3942031
Тестирование -
http://pikabu.ru/story/liga_pomoshchi_nuzhnyi_testeryi__pechenka_4181566
Привет, человеки!
Наступили выходные, до наступления полноценного лета осталось совсем немного, ну а мы по прежнему усаживаемся перед компьютером, и обновляем приложения.
По правде сказать, немного удивлен такой заинтересованностью некоторых участников (подписчиков) моего нано-блога. Надеюсь, я вас не разочарую! =)
Напомню, в прошлый раз мы интегрировали в приложение потустороннюю силу библиотеку для просмотра веб контента, и поверхностно задели вопрос монетизации приложений.
Сегодня поговорим об обновленном компоненте Tabs (Вкладки), и как обещал, вкратце расскажу про способы продвижения приложений в Российском сегменте. Полетели!
Программировать мы будем на примере еще не опубликованного приложения, которое решает простую задачу - является справочником. Углубляться в значимость этой затеи не будем (я имею право на собственных тараканов в голове!).
Для затравки покажу пример того, что мы получим в итоге:
А теперь немного теории.
Вкладки являются одним из наиболее часто используемых и полезных компонентов мобильных пользовательских интерфейсов. Они обеспечивают быстрый и легкий доступ к различным частям приложения.
За примером далеко ходить не надо - самое посещаемое Android приложение на планете осуществляет доступ к каталогу посредством вкладок:
Обновленные же вкладки вместе с выпуском версии 5.0 претерпели некоторые изменения.
1) Вкладки могут меняться свайпом (вправо-влево). Это логично, интуитивно понятно и чертовски удобно (особенно если вы обладатель лопатофона).
2) Вкладки могут наследоваться от Coordinator. Что это дает? Огромный функционал, который доступен в базовой комплектации - скроллинг, скрытие тулбара, строки поиска, новомодных Floating Action Button и прочих ништяков. Если хотите узнать немного больше о элементе Coordinator, рассказано об этом тут.
3) Масштабируемость. При верстке для планшетов вкладки подгоняются под требуемый размер экрана, либо следуют заданным параметрам (fixed, scrollable). В качестве примере изображение из гуглдоков:
Мне захотелось переделать принцип работы каталога в справочнике, и теперь вместо статичного списка категорий я желаю видеть вкладки.
Теперь за дело. Открываем студию, создаем новую активность. Я использую Basic Activity
Теперь нам важно понять логику работы вкладок. Может быть немного больно сложно. Кроме рисования, нам потребуется добавить некоторое количество кода.
Как это работает?
- Activity_Main (Наша главная активность. В ней инициализируются вкладки, даются названия для них. Вся магия проворачивается через viewPager, он же обращается к классам Tab_1, Tab_2)
-- Layout_Main (XML Слой главной активности. В нем имеется Coordinator, Toolbar, TabLayout, и ViewPager. Больше там ничего не нужно)
--- Tab_1/2 (Класс для вкладки. Класс вызывает фрагмент, который является слоем, где уже расставлены необходимые элементы - кнопки/списки/картинки)
---- Fragment_1/2 (XML слой, где для каждой вкладки отдельно рисуется интерфейс. Например, на первой кнопки, на второй список.)
Теперь главная активность все обрабатывает, и при перемещении показывает нужный класс, который отображает фрагмент.
Выглядит в студии процесс нарисованных фрагментов и активности примерно так:
Теперь код. Для фрагментов все однотипно, там царит пустота:
И активность:
Теперь запустим на устройстве. Кроме всего вышеописанного, я добавил отдельный стиль, хотя можно было обойтись встроенным в приложение.
Все скроллится пальчиками, если будем тянуть вверх-вниз, Toolbar будет прятаться. Но перед этим во фрагменте нужно корневым элементом выставить ScrollView / NestedScrollView!
На этом все. Материал, который я использовал можно легко загуглить, но если вы выше этого:
- http://www.materialdoc.com/tabs/ (Есть пример как вместо текста установить значки, но по гайдлайнам советуют не перебарщивать)
Теперь про продвижение. Я не открою ни для кого америку, и наверняка не удивлю подкованную часть населения. Разговор сейчас о том, чем я пробовал пользоваться, с кратким комметарием.
1 место с конца - GoogleМатьЕгоPlay - Если вы выпускаете приложение, и хотите засветить его для всего человечества - добро пожаловать. Взнос 25 зеленых, и корпорация добра дает вам аккаунт разработчика.
Как продвигается? С вашим аккаунтом gmail.com вам доступны инструменты AdMob, AdWords, AdWords Express и прочие. Вы можете легко положить 1000 рублей на счет, две недели промучать поддержку в выборе правильной стратегии, цен, конверсий (которая не нужна для бесплатногго приложения), и забыть про них. Потому что с маленьким бюджетом там делать нечего. Из потраченных денег я приобрел более 800 кликов, из которых установило приложение 0.02%.
2 место с конца - Yandex.Store - симбиоз поисковика, и попытки установить Амиго. Честно, мне каждый раз рекомендуют установить инструмент для отслеживания посещений.
Из преимуществ - бесплатно. Я попробовал использовать его, только потому, что меня привлекла красивая обложка, и громкие словосочетания. Загрузил три приложения, добавил описание, скриншоты, все по старинке импортируется из Google Play. В итоге - пока 1 загрузка (против 40.000 в гугле). Как магазин - не знаю, время покажет.
Как продвигается? Думаю с Яндекс.Директом знакомы многие. Мобильного продвижения там не предусмотрено, но был опыт создания рекламной компании для веб-ресурса, и меня тоже не впечатлил результат.
Золотая середина - Профильные форумы/трекеры. Специализированные форумы, а также ветки в трекере - всегда интересное место. Можно получить хороший фидбек, а также немного увеличить количество загрузок.
Что в плюсе? Бесплатно, зарегистрируйся, и создавай пост. Если приложение регулярно обновляется, тема принесет 100-300 загрузок за обновление. По примерным подсчетам, около того у меня и выходит.
Как продвигается? Можно, например, поучаствовать в программе поддержки разработчиков на 4pda (не реклама прости господи). Идея уместна, если вы уже доделали свой проект, уверены в силах, и у вас есть лишние 8 тысяч - именно такая цена за самый дешевый тариф. Сам не пробовал, но грамотно оформленный пост всегда привлечет внимание.
Приносит от 3000 установок от степени заинтересованности. Если вы сделали что то грандиозное - не сомневайтесь, в сторе приложение подпрыгнет. Либо же смотрите в сторону контекстной рекламы на выбранном ресурсе.
Идеальный вариант - Вы можете предложить в комментариях. Я прекрасно понимаю, что есть миллион способов рекламировать приложение, о чем я не рассказал (VK, мотивированный траффик, промо страницы, продвижение по запросам и прочее), и многое из перечисленного уже перепробовано, но не прельщает.
Спасибо, что дочитали до конца! В следующий раз мы поговорим об умном поиске в Toolbare, который реагирует по вводу первых символов, а также я порадую ребят, которые помогли мне в этом посте.
P.S. мои дорогие подписчики! Если я начал выкладывать котиков, значит школота интеллигенция портала жестом однокнопочного рукоблуда руки поставила минусы, и я восполняю баланс в мире =)
P.S.S. напоследок мой котопес, который всегда ткнет мордой в плохой код:
Привет, земляне!
После удачно пережитой Пятницы 13-го, мы снова садимся за компьютер, и продолжаем обновлять приложения.
Напомню, в прошлый раз мы силой мысли рисовали экран каталога, и познакомились с базовой анимацией.
Сегодня будем интегрировать в программу библиотеку для просмотра web страниц, и я поверхностно расскажу о монетизации своих приложений. Полетели!
Программировать мы будем одно из первых приложений, выставленных на всеобщее обозрение, а именно - клиент Pikabu. Оно уже давно не обновлялось, и требует доработки в режиме просмотра ленты.
Серию постов, с описанием почти всех функций, которые я использовал при написании этой программки, можете посмотреть в профиле, поэтому заострять внимание на этом не будем.
Первым делом удаляем старую активность для просмотра веб страниц, и создаем новую, так сказать, "с чистого листа":
Мы используем Basic Activity с функцией наследования. Это означает, что когда мы зайдем в эту активность, в Toolbar'е будет по умолчанию располагаться стрелка для выхода на предыдущий экран (смотри схематическую картинку ниже).
Итак, активность создана, она полностью пустая. Лезем на гитхаб, подбираем библиотеку для просмотра страниц.
Я выбрал самую навороченную, с поддержкой старых версий Android:
FinestWebView-Android
Кроме нереального огромного readme она имеет солидный список для кастомизации и стилизации, поэтому, кто пользуется средствами просмотра web контента - must have!
Выглядит примерно так:
Можно углядеть, что эта сборка предлагает собственные настройки (т.е. темы), а также дополнительный функционал, в виде кнопок навигации вверху. Значит нам меньше работы.
Интегрируем библиотеку в свой проект, записываем зависимости в Gradle:
Далее - настройка. Пробежавшись глазами по списку методов, были выбраны основные на сохранение данных (пароль/логин), кеширование основных ресурсов, поддержка JavaScript, и поддержку ZoomControl
Для цветового соответствия был написан коротенький стиль, который соответствует общей палитре в приложении.
На реальном устройстве выглядит так (теперь приложение стало полноэкранным):
Что было сделано кроме веб браузера:
- Поправил размер иконки (для прошивок MIUI)
- Исправлены стили для Android 5.0-6.x
- Переделал режим советы
- Стартовый экран для новеньких со списком изменений
Решать о том, насколько удачным было обновление конечно же Вам, через несколько часов обновление будет доступно на маркете, пока что поговорим о монетизации.
Монетизация
Монетизация с помощью рекламных блоков - один из способов заработка в мобильных приложениях. С помощью рекламы можно натыкать кристаллов в игре, открыть уровень или еще что то.
В наших случаях (у нас не игра, а приложение) показывается межстраничные объявления. Как это действует?
- Загружается экран приложения. На нем ничего не происходит. Вы тыкаете на любую кнопку.
-- Происходит загрузка/отображение рекламы. Если понравилось - нажали, если нет - закрыли.
--- После закрытия объявление вы продолжаете пользоваться приложением.
Похожим способом можно показывать баннеры внутри программы, или интегрировать их в интерфейс, как сделал гугл в мобильном маркете.
Типы рекламы
Всего типов рекламы (основных) четыре:
- Баннер
- Полноэкранный баннер
- Нативная реклама
- Видеореклама с возможностью пропустить ролик / без возможности пропустить ролик
За просмотр каждого объявления идет начисление средств. Например, за просмотр 1000 объявлений типа баннер оплата 0.01$.
За клик соответственно больше. Но это также зависит от триллиона показателей и от положения марса в созвездии венеры
Выбор агрегатора
Я использую медиатор от Appodeal, он совмещает в себе все популярные сетки (от AdMob до Yandex и InMobi), и позволяет выводить средства без ожидания 90 и 60 дней. Также он очень удобный, и обычно затраты на отображение рекламы - 5-6 строк кода.
Если интересно - задавайте вопросы, или присоединяйтесь!
Спасибо, что дочитали до конца! В следующий раз мы немного поговорим о продвижении приложения, кроме магазина Google Play.
Посмотреть, каким стал клиент для Pikabu можно из маркета, или тем кому не терпит подождать:
4PDA - http://4pda.ru/forum/index.php?showtopic=720038&st=20#entry49607936
Google Play - https://play.google.com/store/apps/details?id=xyz.oneclickstudio.pikabu
P.S. мои дорогие подписчики! Если я начал выкладывать котиков, значит школота интеллигенция портала жестом однокнопочного рукоблуда руки поставила минусы, и я восполняю баланс в мире =)
Привет, пикубуняне!
Надеюсь я никого не задолбал своим программированием (те, кто любит котиков надеюсь меня простят).
Сегодня на суд выносится очередное приложение на платформе Android, предназначенное для просмотра онлайн / скачивания популярных сериалов.
Было много обсуждения по поводу легальности данной затеи, об этом Вы можете почитать в моих предыдущих постах (и комментариях).
Итак. После долгой и кропотливой работы, одной съеденной собаки и блока выкуренных сигарет программа готова к первому общему тесту.
Так как мне очень важно мнение пользователей, использующие разные телефоны (и версии андроид), я хочу наверняка знать, что приложение корректно работает на всех устройствах.
Для этого я Вас и приглашаю поучаствовать в открытом тестировании аппки, и заработать печеньку (в буквальном смысле)
Что нужно?
- Просто попользоваться приложением, потыкать там где не светит солнце во всевозможные места, в общем прикинуться рядовым пользователем, и поискать баги.
- После того, как вы успешно найдете два/три косяка, при выходе из программы вы увидите такое окошко:
После нажатия на ОК, откроется штатный браузер, и загрузится гуглформа, которую я подготовил. Вопросы самые простые, я думаю справится каждый.
Что взамен?
Взамен, после финальных доработок и правок, каждому, кто указал в форме контактный email, будет отправлена финальная версия программы, с плюшками в виде убранной рекламы.
Кроме этого скромного подарка могу только добавить вам большое человеческое спасибо, за то что уделили минуту из своей жизни, поэтому можете со спокойной душой продолжать заниматься своими делами в предверии майских праздников.
Верю в лучшее и надеюсь, пост не заминусуют до того, пока им не заинтересуется адекватная часть портала.
P.S. Для пользователей планшетов! При установке приложения на свое устройство, вы будете лицезреть растянутый интерфейс, так как визуального стиля для Вас не подготовлено. Простите!
Ссылка для скачивания приложения (ЯДиск):
https://yadi.sk/d/KGL_Z4F1rXNa5 (APK)
https://yadi.sk/d/-JgcRIYwrXNcx(ZIP)
На всякий случай продублирую ссылку для опроса, кто не хочет тыкать в телефоне.
https://docs.google.com/forms/d/1U5FyxZKnH-CR76fVImjnJOZAw5s6sHwaDXTd2HIYJjc/viewform#responses
Всем бобра, спасибо за внимание =)
Привет, пикабуняне!
Сегодня опять выдался выходной, а значит пора дальше обновлять приложения.
В предыдущем посте мы нарисовали стартовый экран для приложения, используя CardView и развитую мышцу мозга. Сегодня будем продвигаться еще глубже, и обновим экран каталога - самое масштабное место в практически любом приложении.
Использовать будем наработки по CardView, познакомимся с элементом Coordinator, и бонусом я немножко напишу про использование базовой анимации в приложении.
Первым делом создаем активность в студии. Использовать будем Scrolling Activity:
Перед тем, как продолжить, немного теории.
Coordinator Layout - слой, который как ясно из названия, координирует действия дочерних элементов, которые он содержит (обеспечивает анимацию при прокрутке, появление и изчезание отдельных слоев, меню и вкладок). Он был анонсирован вместе с Android 5.0, и с той поры пользуется популярностью.
Реализаций для этого компонента масса, главное фантазия.
В Гуглдоках можно найти следущий пример работы, его мы и будем повторять:
После создания активности мы получаем слой, с визуально большим размером Toolbar'а.
Мы сделаем его еще больше, потому что будем загружать туда изображение. Для этого меняем значение:
android:layout_height="app_bar_height"
на
android:layout_height="280dp"
После этих хитрых манипуляций, тулбар готов. Теперь нам требуется изображение, которое будет там висеть.
Лезем на уже известный сайт http://www.freepik.com, вводим поисковые запросы:
- Appliances (Бытовая техника)
- Material Design
В итоге имеем два изображения:
Используя графический редактор, редактируем два этих изображения, чтобы в приложении название "Каталог" и стрелка назад помещались в разноцветных блоках, и были читабельны:
Теперь засовываем это в студию, смотрим на эмуляторе:
Теперь переходим к наполнению самого каталога. Так как у нас каталог представлен в виде бытовой и цифровой техники, мы быстренько разбрасываем его на основные категории, по нажатию на которую будет раскрываться список с подпунктами.
Берем куски кода CardView из предыдущего занятия экрана, загружаем нужные иконки на https://design.google.com/icons/, и получаем следующее:
Отлично. Теперь по нажатию на один из пунктов, внутри карточки должен появиться список из подкатегорий. Я сделаю подобный список для одного элемента, принцип будет везде одинаков.
Создаем новый слой (совсем отдельный), рисуем в нем список:
Темным цветом я выделил основную ссылку, серым подкатегорию. В дальнейшем все это дело будет наполняться данными.
После того, как мы все это нарисовали, нам надо затолкать этот список в карточку, через дополнительный атрибут <include/>
Этот атрибут позволяет вставлять в слой дополнительные слои, который, в свою очередь, находятся внутри слоя. Сложно? Обрисую как это выглядит:
- LinearLayout (корневой слой)
-- android.support.v7.widget.CardView (карточка)
--- RelativeLayout (корневой слой внутри карточки)
---- include (вставляем отдельный слой, внутри него своя разметка)
--- /RelativeLayout (закрываем слой внутри карточки)
-- / (закрываем все остальное)
После мозговой атаки, мы достигли требуемого, но нам нужно, чтобы этот слой показывался только по нажатию (сейчас он будет виден постоянно).
Для этого задаем ему атрибут android:visibility="gone", что означает, что этого слоя не будет видно, пока мы не вызовем его программно. Теперь он будет скрыт, и будет ждать команды на отображение.
Но чтобы отобразиться эффектно, мы будем использовать программную анимацию.
За нее отвечает две строчки кода:
Animation anim = AnimationUtils.makeInAnimation(this, true);
tv1.startAnimation(anim);
Наглядно выглядит следующим образом. Такую анимацию можно использовать почти ко всем частям интерфейса, не только к тексту.
Методов опять таки очень много, я приведу лишь некоторые:
Ударение о поверхность:
anim.setInterpolator(new BounceInterpolator());
Ускорение:
anim.setInterpolator(new AccelerateInterpolator());
Замедление:
anim.setInterpolator(new DecelerateInterpolator());
Ускорение с замедлением:
anim.setInterpolator(new AccelerateDecelerateInterpolator());
Также можно комбинировать почти все анимации.
В итоге, на рабочем устройстве получаем красиво оформленный каталог. Над ним еще прийдется очень долго работать, и писать код, но начало положено.
Спасибо, что дочитали до конца! В следующий раз мы будем интегрировать в программу стороннюю библиотеку для просмотра web страниц, а также я немного расскажу о монетизации приложения в целом.
P.S. мои дорогие подписчики! Если я начал выкладывать котиков, значит школота интеллигенция портала жестом однокнопочного рукоблуда руки поставила минусы, и я восполняю баланс в мире =)