Атрибут ScaleType для ImageView

Атрибут ScaleType для ImageView позволяет изменять границы (размер) изображения относительно родительского View элемента. Этот атрибут мы рассмотрим на практическом примере, задавая для него различные значения. Я постарался подобрать достаточно большое изображение, чтобы понять, как происходит изменение его размеров. Информацию об этом атрибуте вы также можете получить из официальной доки.

Упрощаем работу с логгированием

Решил немного упростить процесс работы с логгированием и создать для этого свой «кастомный» класс (я назвал его Logs). Нет, конечно же, нет, я не стал писать все «на низком» уровне:) Речь идет о классе, который содержит статические методы с одноименным названием, что и в классе Log. Идея такова, чтобы вызывать нужные методы логгирования, передавая только значение в качестве параметра (тег для логгирования будет добавлять метод-посредник). Кроме того, класс Logs будет содержать переменную-флаг, в зависимости от значения которой логгирование будет осуществляться или нет. Это избавит от необходимости чистить код от «логов» перед релизом приложения.

Запись и чтение файла (внутренняя память устройства)

Приложение может сохранять какую-то информацию в файлах, которые могут храниться как на SD-карте, так и во «внутренней» памяти устройства. Ниже мы рассмотрим работу с файлами в случае второго варианта, то есть когда файл хранится в памяти смартфона.

Как программно получить версию ОС Android и другую информацию об устройстве

В редких случаях, но может оказаться нужным получить некоторую информацию о версии ОС Андроид, на которой запускается приложение. Это может определить выбор реализации того или иного функционала. Рассмотрим простой пример, как это можно сделать. Помимо версии ОС будем выводить на экран и другую информацию, например, название устройства, производителя, модель.

Текстовый виджет TextView

Текстовый виджет TextView без сомнения можно назвать наиболее часто используемым виджетом. Это первый элемент View, с которым, как правило, знакомятся начинающие android-разработчики. При создании нового проекта в Android Studio мы видим базовый layout с одним элементом TextView.

Файл манифеста AndroidManifest.xml

Любое Андроид-приложение включает в себя файл описания или файл манифеста — AndroidManifest.xml. Манифест содержит важную для операционной системы информацию о нашем приложении. Расширение xml говорит нам о том, что структура и содержание файла соответствует всем стандартам языка описания xml, т.е. он содержит набор некоторых специфичных для ОС Андроид тегов с дополнительными атрибутами. Практически все теги парные.

Решение проблемы с драйвером Nexus 5 & Windows

Попробовал подключить Nexus 5 к ПК, чтобы запустить на нем приложение из Android Studio, но столкнулся с проблемой: Windows не могла распознать устройство, не было каких-то драйверов. Досадная вещь, но проблема решилась благодаря веб-серфингу. Ниже я попытался набросать небольшую инструкцию-памятку. Возможно, пригодится кому-то еще.

Обработка приложением запросов ACTION_SEND

Мы уже рассмотрели, как можно отправить данные другим приложениям, используя ACTION_SEND. В этот раз мы создадим приложение, которое способно обрабатывать подобные запросы и принимать отправляемые данные.

Наше приложение будет включать в себя два Активити. Первое (основное) будет запускаться при запуске приложения и будет выводить на экран строку, хранящуюся в Preferences. Второе Активити будет запускаться системой в ответ на запрос ACTION_SEND. Оно будет доставать из Intent-а отправленные данные (текстовую строку) и сохранять их в Preferences. Таким образом, одно Активити данные получает и сохраняет, а другое отображает.

Используем ACTION_SEND для отправки данных приложениям

Представим себе ситуацию, когда нам потребовалось отправить какие-то данные из приложения, например, с помощью Gmail. Писать самому код для работы с API Gmail было бы глупо — это равносильно изобретению велосипеда. Вместо этого мы могли бы использовать уже встроенную в Андроид функциональность, а именно — использование Intent-ов с действием ACTION_SEND. Все, что нам нужно сделать — это создать новый объект Intent, задать действие ACTION_SEND, а также передаваемые данные и их тип. После этого, нам останется запустить новое Активити, используя startActivity(), передавая в качестве параметра созданный Intent. Система сама найдет приложения, установленнные на устройстве и способные обрабатывать действия ACTION_SEND и запустит их. Если таких приложений несколько (что чаще всего и бывает), то пользователю будет показан диалог выбора нужного приложения. То есть далее нам уже не нужно будет беспокоиться о том, как и с помощью чего будут отправлены данные — это уже забота ОС и других приложений.

Loaders. Используем AsyncTaskLoader

Мы уже рассматривали ранее несколько способов создания асинхронной работы/загрузки данных. В Андроид-разработке есть еще один очень эффективный инструмент — Loaders или «загрузчики». Пожалуй, тут название говорит само за себя: Loader используется, как правило, для загрузки каких-либо данных. При этом работой загрузчиков из класса Активити или фрагмента позволяет управлять так называемый LoaderManager. Он используется один на весь класс Активити, но позволяет работать с несколькими загрузчиками.