28 февраля 2014 г.

Структура проекта Андроид (часть 3).

Файл AndroidManifes.xml

Этот файл содержится во всех приложениях Андроид, так как описывает основные параметры приложения. По существу это файл конфигурации приложения. Он объявляет компоненты приложения, разрешения необходимые приложению (например доступ в Интернет, разрешения на отправку SMS и т.п.).
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.proandroid.ap0001"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.proandroid.ap0001.ActivityMain"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Файл манифеста приложения выполняет следующие функции:
  • объявляет имя Java-пакета данного приложения (строка 3). Имя пакета служит уникальным идентификатором приложения;
  • описывает компоненты приложения – Activity,Service, Broadcast Receiver и Content Provider, из которых состоит данное приложение. Эти объявления позволяют Андроид знать чем компоненты являются и при каких условиях они могут быть запущены;
  • объявляет какие разрешения должно иметь приложение для обращения к защищенным системным службам и взаимодействия с компонентами других приложений;
  • объявляет разрешения, которые сторонние приложения обязаны иметь, чтобы взаимодействовать с компонентами данного приложения;
  • объявляет минимальный уровень API (SDK), которого требует приложение (строка 8);
  • объявляет целевую версию API (SDK) приложения (строка 9);
  • перечисляет библиотеки с которыми приложение должно быть связано.
Тут приведена краткая информация по этому очень важному файлу. Чуть позже если будет время и желание опишу этот файл подробнее.

Структура проекта Андроид (часть 2)

Поскольку информацию приходится собирать по частям из разных источников поэтому приходится одну тему разбивать на несколько частей.
И так поехали еще раз кратенько по каталогам в проекте Андроид.
AP00026
res/layout
В этом каталоге находятся файлы разметки в формате XML которые определяют внешний вид окна и расположение на нем элементов управления. Само окно управляется кодом соответствующей Активности (Activity). В моем примере это файл layout_main.xml.
Каждый файл разметки представляет собой окно приложения.
res/drawable-…
В этих каталогах хранятся графические файлы, предназначенные для отображения на экранах различных плотностей.
res/values
Здесь хранятся XML файлы, в которых хранятся общие константы для всего приложения: текст, цвета, стили и т.п.
Файл R.java
Каждый раз при компиляции проекта, среда разработки создает класс R и помещает его соответственно в файл с названием R.java. Поэтому в ручную этот файл править нет ни какого смысла и необходимости, поскольку он все равно будет перезаписан при каждой новой компиляции. Об этом же говорит и комментарий в начале данного файла. Класс R (от resources) используется для обращения к ресурсам, которые расположены в каталоге res.
Класс R содержит набор внутренних классов с идентификаторами ресурсов, которые создает в зависимости от содержимого каталога res.
  • drawable – для каталога res/drawable;
  • layout – для каталога res/layout;
  • string – для идентификаторов строк в файле string.xml;
  • attr – для дополнительных атрибутов, определяемых во внешнем xml файле.
Файл ActivityMain.java
Это файл создала среда разработки (ADT plugin) с тем именем, что мы задали. Код этого файла как  раз и отображает на экране файл разметки layout_main.xml.

package com.proandroid.ap0001;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class ActivityMain extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layout_main);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.activity_main, menu);
  return true;
 }

}
Строка номер 12 как раз и выводит на экран содержимое файла разметки layout_main.xml.
Пока что нужно запомнить что Активность (Activity) – это код на языке Java, который управляет отображением и поведением окна приложения и его элементов описанных в файле Разметки (layout).Если в приложении будет несколько окон, то для каждого надо создавать отдельный класс Активности, наследуемый от базового класса Activity.

26 февраля 2014 г.

Неплохая книга по программированию под Андроид

45798
Алексей Голощапов
Google Android. Создание приложения для смартфонов и  планшетных ПК.
ISBN 978-5-9775-0880-3; 2013 г.

Неплохая книга по данной теме. Более менее нормально структурирована и материал дается последовательно. Порядку в голове от нее прибавляется. Эту книгу можно использовать и как учебник и как справочник. Но все же это больше академическая книга и справочник. Хотя в ней есть достаточно мутные переводы изначальной документации, а местами и просто ошибки, и все же она не плоха. Другие книги про которые я уже писал, построены по другому принципу, берется приложение и разрабатывается с нуля с попутными объяснениями, но к сожалению не всегда полными.
Вообще из тех книг что попались в руки, эта пока, единственная в своем роде, которая более или менее по порядку описывает тему программирования под Андроид. По ней одной, конечно же, хорошо изучить и понять данную тему трудновато будет, но если все время сверяться с информацией из альма-матер, по темам которая она освещает, то в принципе можно разобраться.

В ней есть совершенно мутная и не понятно для чего написанная глава про отладку приложений, несколько страниц просто ни о чем.

Чем дальше ее читаю тем больше разочаровываюсь. Становится не понятным, кто у кого скопипастил инфу. То ли автор с этого сайта, то ли сайт у Голощапова. Хотя я прихожу к выводу что это скорее сайт стырил у Голощапова но от этого не легче.

Пятая глава, в которой описываются Layouts (разметки), ну вообще очень поверхностная.

Структура проекта Андроид (часть 1)

Сегодня в деталях рассмотрим структуру приложения Андроид. Создадим еще раз простое приложение Андроид, подобно тому как делали здесь и рассмотрим его структуру более подробно.
Прежде чем приступить к созданию этого простого приложения, создадим для него свою иконку запуска. Я сделал простой файл в формате png который выглядит так (черной рамки вокруг нет):
ProAndroid 512x512
Его размер я сделал 512x512 px. Вы можете скачать этот файлик кликнув по нему сперва левой кнопкой мыши и когда откроется его полная версия, скачать кликнув по нему левой кнопкой мыши.






Далее идем на сайт Android Asset Studio и выбираем там ссылку Launcher icons.

AP00001
Попадаем на такую страничку и там жем IMAGE
AP00002
Откроется окно выбора файла изображения для генерации иконки приложения. Выберите файл который скачали или ваш собственный (в этом случае изображение иконки будет отличаться от приведенного ниже). После того как вы выбрали файл изображения и он загрузился, то вы увидите следующее:
AP00004
Мы видим уменьшенную копию нашего исходного изображения и иконки запуска, сгенерированные программой для разных плотностей экрана.
Можно поиграться с настройками создания внешнего вида иконки запуска. Они очень простые и описывать их нет смысла, тем более получаемый результат вы сразу будете видеть.
Чтобы загрузить набор иконок запуска себе на компьютер нажимаем DOWNLOAD.ZIP и сохраняем этот файл себе на комп.
И сразу посмотрим содержимое скачанного файла.
В корне архива находится папка res, и в ней пять подпапок с иконками для всех пяти основных, на сегодня, плотностей экранов.


AP00013

Все. Далее запускаем Eclipse и создаем простое приложение (делаем все как на скринах).
Шаг 1.
AP00005
Шаг 2.
AP00006
Шаг 3.
AP00007
Шаг 4.
AP00008
Шаг 5.
AP00009
Шаг 6.
AP00010
И вот он наш проект. Открывается он сразу на фале активности ActivityMain.java
AP00011
Далее рассмотрим что нам автоматически сгенерировал Eclipse. Я раскрыл почти все папки чтобы лучше объяснить содержимое проекта. Сразу надо отметить, что все содержимое проекта это отображение того, что у вас физически лежит на диске (файлы и папки). Просто это удобно отображено и сгруппировано в Eclipse. Основная часть всего этого хозяйства лежит в папке проекта. Сама папка проекта расположена в папке воркспейса (workspace).

Описание папок проекта Андроид:
src – в этом каталоге находятся исходные файлы классов java (файлы с расширением java).
gen – в этом каталоге находятся файлы автоматически генерируемые Eclipse. Каждый раз когда вы что то меняете в проекте, Eclipse сам меняет содержимое этого каталога и файлов в нем. Сюда лучше без крайней необходимости руками не лазить.
assets – ресурсы приложения доступные только для чтения которые не возможно расположить в папке res. Например: видео, звуки и т.п.
bin – в этой папке будет, после компиляции проекта будет располагаться файл с расширением .apk, который уже потом можно устанавливать на любое устройство для которого он был создан.
res – каталог ресурсов, которые использует приложение. В основном здесь находятся файлы иконок и изображений для различных плотностей экранов, в соответствующих подкаталогах (drawable-mdpi, drawable-ldpi, drawable-hdpi и т.д.), так же там находятся файлы разметок, меню, стилей и т.п.
Приведу скрин с пояснениями, но они очень краткие и их очень много на небольшом экране. Но все лучше чем ни чего.
AP00012
Так же приведу несколько видео где описываются подобные темы. Как сами можете увидеть все опять сумбурно и без системно. Но на безрыбье и рак рыба.
Структура проекта Андроид (видео 1)
Структура проекта Андроит (видео 2)
Структура проекта Андроид (видео 3)
Стурктура проекта Андроид (видео 4)
Запустим наше приложение
AP00014
AP00015
А теперь посмотрим что изменилось в файлах проекта нашего приложения
AP00016
В папке bin образовалось два важных файла:
ap0001.apk – пакет Андроид, готовый для установки на устройство, содержащий в себе файл classes.dex и все файлы ресурсов приложения.
classes.dex – собственно исполняемый файл нашего приложения для VM Dalvik.
Теперь чуть подробней рассмотрим каталоги drawable-mdpi, drawable-ldpi, drawable-hdpi и drawable-xhdpi в папке res.
AP00017
Если вы зайдете в эти каталоги и посмотрите размеры изображений то увидите то же самое что изображено на скриншоте с моими пояснениями. Эти иконки с зеленым Андроидом были сгенерированы Eclipse. Но мы уже подготовили свою икону запуска приложения. Сейчас мы ее вставим в проект.
Для этого кликнем правой кнопкой мыши по имени нашего проекта и выберем в контекстном меню Import…
AP00018
Затем выбираем Arcive File и жмем Next
AP00019
Выбираем скачанный нами архив
AP00021
Далее делаем все как на скрине
AP00022
Данный импорт ПЕРЕЗАПИСЫВЕТ файлы иконок запуска.
И вот что мы получаем
AP00023
Теперь нам снова надо запустить приложение, но до запуска проделать одну штучку. Зайти в папку bin, затем в папку res, затем в папку crunch и удалить три подпапки в которых закешированые старые иконки.
AP00024
И запустить наше приложение. В папке crunch, автоматически создадутся папочки с новым набором иконок. Приложение запуститься. Выходим из него и заходим в менеджер приложений:
AP00025
Там уже видим приложение с нашей иконкой которую мы создали.
Таким образом, изменяя части нашего проекта, и видя к чему приводят эти изменения на практике, мы будем изучать структуру проекта Андроид.

21 февраля 2014 г.

Архитектура операционной системы Андроид

Классический рисунок представляющий архитектуру ОС Android:

system-arch

Если кому-то сложно с английским, то на всякий случай то же самое по на русском:

a001
Сразу приведу оригинальное видео с канала Android Developers на Youtube, где все авторитетно рассказывается и показывается, правда на враждебном нам буржуйском языке. Я использовал это видео, чтобы описать некоторые пункты архитектуры, описания которых не нашел в сети на русском языке.

Архитектура Android.

Если представить компонентную модель Android в виде некоторой иерархии, то в самом низу, как самая фундаментальная и базовая составляющая, будет располагаться ядро операционной системы (Linux Kernel).
Часто компонентную модель ещё называют программным стеком. Действительно, это определение тут уместно, потому что речь идет о наборе программных продуктов, которые работают вместе для получения итогового результата. Действия в этой модели выполняются последовательно, и уровни иерархии также последовательно взаимодействуют между собой.

LINUX KERNEL (ЯДРО ЛИНУКС)

Как известно, Андроид основан на несколько урезанном ядре ОС Linux и поэтому на этом уровне мы можем видеть именно его (версии 2.6.x). Оно обеспечивает функционирование системы и отвечает за безопасность, управление памятью, энергосистемой и процессами, а также предоставляет сетевой стек и модель драйверов. Ядро также действует как уровень абстракции между аппаратным обеспечением и программным стеком.

LIBRARIES (БИБЛИОТЕКИ)

«Выше» ядра, как программное обеспечение промежуточного слоя, лежит набор библиотек (Libraries), предназначенный для обеспечения важнейшего базового функционала для приложений. То есть именно этот уровень отвечает за предоставление реализованных алгоритмов для вышележащих уровней, поддержку файловых форматов, осуществление кодирования и декодирования информации (в пример можно привести мультимедийные кодеки), отрисовку графики и многое другое. Библиотеки реализованы на C/C++ и скомпилированы под конкретное аппаратное обеспечение устройства, вместе с которым они и поставляются производителем в предустановленном виде.
Краткое описание некоторых из них:
  • Surface Manager – в ОС Android используется композитный менеджер окон, наподобие Compiz (Linux), но более упрощенный. Вместо того чтобы производить отрисовку графики напрямую в буфер дисплея, система посылает поступающие команды отрисовки в закадровый буфер, где они накапливаются вместе с другими, составляя некую композицию, а потом выводятся пользователю на экран. Это позволяет системе создавать интересные бесшовные эффекты, прозрачность окон и плавные переходы.
  • Media Framework – библиотеки, реализованные на базе PacketVideo OpenCORE. С их помощью система может осуществлять запись и воспроизведение аудио и видео контента, а также вывод статических изображений. Поддерживаются многие популярные форматы, включая MPEG4, H.264, MP3, AAC, AMR, JPG и PNG.
  • SQLite – легковесная и производительная реляционная СУБД, используемая в Android в качестве основного движка для работы с базами данных, используемыми приложениями для хранения информации.
  • OpenGL | ES
    3D библиотеки — используются для высокооптимизированной отрисовки 3D-графики, при возможности используют аппаратное ускорение. Их реализации строятся на основе API OpenGL ES 1.0.

    Источник: http://android-shark.ru/arhitektura-operatsionnoy-sistemyi-android/
    © Акулы Андроида
    3D библиотеки которые используются для высоко оптимизированной отрисовки 3D-графики, при возможности используют аппаратное ускорение. Их реализации строятся на основе API OpenGL ES 1.0.
    OpenGL ES (OpenGL for Embedded Systems) – подмножество графического программного интерфейса OpenGL, адаптированное для работы на встраиваемых системах.
  • FreeType – библиотека для работы с битовыми картами, а также для растеризации шрифтов и осуществления операций над ними. Это высококачественный движок для шрифтов и отображения текста.
  • LibWebCore – библиотеки известного шустрого браузерного движка WebKit, используемого также в десктопных браузерах Google Chrome и Apple Safari.
  • SGL (Skia Graphics Engine) – открытый движок для работы с 2D-графикой. Графическая библиотека является продуктом Google и часто используется в других их программах.
  • SSL - библиотеки для поддержки одноименного криптографического протокола.
  • Libc – стандартная библиотека языка C, а именно её BSD реализация, настроенная для работы на устройствах на базе Linux. Носит название Bionic.
На этом же уровне располагается Android Runtime – среда выполнения. Ключевыми её составляющими являются набор библиотек ядра и виртуальная машина Dalvik. Библиотеки обеспечивают большую часть низкоуровневой функциональности, доступной библиотекам ядра языка Java.

Источник: http://android-shark.ru/arhitektura-operatsionnoy-sistemyi-android/
© Акулы Андроида
 
ANDROID RUNTIME (СРЕДА ВЫПОЛНЕНИЯ АНДРОИД)

На этом же уровне располагается Android Runtime – среда выполнения. Ключевыми её составляющими являются набор библиотек ядра (Core Libraries) и виртуальная машина Dalvik. Библиотеки обеспечивают большую часть низкоуровневой функциональности, доступной библиотекам ядра языка Java.
Каждое приложение в ОС Android запускается в собственном экземпляре виртуальной машины Dalvik. Таким образом, все работающие процессы изолированы от операционной системы и друг от друга. И вообще, архитектура Android Runtime такова, что работа программ осуществляется строго в рамках окружения виртуальной машины. Благодаря этому осуществляется защита ядра операционной системы от возможного вреда со стороны других её составляющих. Поэтому код с ошибками или вредоносное ПО не смогут испортить Android и устройство на его базе, когда сработают. Такая защитная функция, наряду с выполнением программного кода, является одной из ключевых для надстройки Android Runtime.
Dalvik полагается на ядро Linux для выполнения основных системных низкоуровневых функций, таких как,  безопасность, потоки, управление процессами и памятью. Вы можете также писать приложения на C/C++, которые будут работать непосредственно на базовом уровне ОС Linux. Хотя такая возможность и существует, необходимости в этом нет никакой.
Если для приложения важны присущие C/C++ скорость и эффективность работы, Android предоставляет доступ к нативной среде разработки (NDK – Native Development Kit). Она позволяет разрабатывать приложения на C/C++ с использованием библиотек libc и libm, а также обеспечивает нативный доступ к OpenGL.
Доступ к устройствам и системным службам Android осуществляется через виртуальную машину Dalvik, которая считается промежуточным слоем. Благодаря использованию Dalvik для выполнения кода программы разработчики получают в свое распоряжение уровень абстракции, который позволяет им не беспокоиться об особенностях конструкции того или иного устройства.
Виртуальная машина Dalvik может выполнять программы в исполняемом формате DEX (Dalvik Executable). Данный формат оптимизирован для использования минимального объема памяти. Исполняемый файл с расширением .dex создается путем компиляции классов Java с помощью инструмента dx, входящего в состав Android SDK. При использовании IDE Eclipse и плагина ADT (Android Development Tools) компиляция классов Java в формат .dex происходит автоматически.
Как было сказано выше, инструмент dx из Android SDK компилирует приложения, написанные на Java, в исполняемый формат (dex) виртуальной машины Dalvik. Помимо непосредственно исполняемых файлов, в состав приложения Android входят прочие вспомогательные компоненты (такие, например, как файлы с данными и файлы ресурсов). SDK упаковывает все необходимое для установки приложения в файл с расширением .apk (Android package). Весь код в одном файле .apk считается одним приложением и этот файлиспользуется для установки данного приложения на устройствах с ОС Android.
 
APPLICATION FRAMEWORK (КАРКАС ПРИЛОЖЕНИЙ)

Уровнем выше располагается Application Framework, иногда называемый уровнем каркаса приложений. Именно через каркасы приложений разработчики получают доступ к API, предоставляемым компонентами системы, лежащими ниже уровнем. Кроме того, благодаря архитектуре фреймворка, любому приложению предоставляются уже реализованные возможности других приложений, к которым разрешено получать доступ.
В базовый набор сервисов и систем, лежащих в основе каждого приложения и являющихся частями фреймворка, входят:
  • Activity Manager – менеджер Активностей, который управляет жизненными циклами приложений, сохраняет данные об истории работы с Активностями, а также предоставляет систему навигации по ним.
  • Package Manager – менеджер пакетов, управляет установленными пакетами на вашем устройстве, отвечает за установку новых и удаление существующих.
  • Window Manager – менеджер окон, управляет окнами, и предоставляет для приложений более высокий уровень абстракции библиотеки Surface Manager.
  • Telephony Manager – менеджер телефонии, содержит API для взаимодействия с возможностями телефонии (звонки, смс и т.п.)
  • Content Providers – контент-провайдеры, управляют данными, которые одни приложения открывают для других, чтобы те могли их использовать для своей работы.
  • Resource Manager – менеджер ресурсов, обеспечивает доступ к ресурсам без функциональности (не несущими кода), например, к строковым данным, графике, файлам и другим.
  • View System – богатый и расширяемый набор представлений (Views), который может быть использован для создания визуальных компонентов приложений, например, списков, текстовых полей, таблиц, кнопок или даже встроенного web-браузера.
  • Location Manager – менеджер местоположения, позволяет приложениям периодически получать обновленные данные о текущем географическом положении устройства.
  • Notification Manager – менеджер оповещений, благодаря которому все приложения могут отображать собственные уведомления для пользователя в строке состояния.
Таким образом, благодаря Application Framework, приложения в ОС Android могут получать в своё распоряжение вспомогательный функционал, благодаря чему реализуется принцип многократного использования компонентов приложений и операционной системы. Естественно, в рамках политики безопасности.
Стоит отметить, просто на понятийном уровне, что фреймворк лишь выполняет код, написанный для него, в отличие от библиотек, которые исполняются сами. Ещё одно отличие заключается в том, что фреймворк содержит в себе большое количество библиотек с разной функциональностью и назначением, в то время как библиотеки объединяют в себе наборы функций, близких по логике.

APPLICATIONS (ПРИЛОЖЕНИЯ)

На вершине программного стека Android лежит уровень приложений (Applications). Сюда относится набор базовых приложений, который предустановлен на ОС Android. Например, в него входят браузер, почтовый клиент, программа для отправки SMS, карты, календарь, менеджер контактов и многие другие. Список интегрированных приложений может меняться в зависимости от модели устройства и версии Android. И помимо этого базового набора к уровню приложений относятся в принципе все приложения под платформу Android, в том числе и установленные пользователем.
Считается, что приложения под Android пишутся на языке Java, но нужно отметить, что существует возможность разрабатывать программы и на C/C++ (с помощью Native Development Kit), и на Basic (с помощью Simple) и с использованием других языков. Также можно создавать собственные программы с помощью конструкторов приложений, таких как App Inventor. Словом, возможностей тут много.

20 февраля 2014 г.

Дизайн приложений Андроид (часть 1)

Ну что ж, начнем кратки и вольный перевод, раздела Дизайн с сайта http://developer.android.com

Дале чтобы вы понимали где мы находимся я буду приводить оригинальную ссылку, чтобы если что могли сами все прочитать, понять и если надо, то меня поправить

Designe –> Get Started –> Create Vision (Вообразите)

При создании приложения Андроид постарайтесь достичь этих трех целей:

Очаруй меня
Как красота – это нечто большее, чем уход за кожей, так и приложения для Android должны быть идеальными и эстетично выглядеть на всех уровнях. Быстрые и ясные переходы;  хорошо продуманное и осмысленное оформление. Иконки приложений, по праву, должны быть произведениями искусства. Как хорошо сделанный инструмент, ваше приложение должно стремиться сочетать красоту, простоту достижения цели, чтобы создать волшебное ощущение легкости и мощи.

Упрости мне жизнь
Android приложения должны облегчать жизнь и быть простыми для понимания. При использовании приложения впервые, основные его функции должны быть интуитивно понятны. Дизайн должен быть таким чтобы не отталкивать при первом использовании приложения. Для решения своих задач, приложение не должно требовать сложных манипуляций руками и головой.  Люди всех возрастов и культур должны легко чувствовать себя с приложением. Никогда не перегружайте интерфейс приложения слишком большим количеством выборов.

Удиви меня
Не достаточно сделать приложение легким для использования. Приложения для Android  должны дать людям возможность попробовать что-то новое. Android позволяет людям комбинировать использование приложений для достижения нужных им задач, используя многозадачность, уведомления и обмен данными между приложениями. Приложения должны быть простыми и удобными, предоставляя людям доступ к первоклассным технологиям с ясностью и изяществом.

Фууух так больше переводить не буду, а то так много времени убью… дальше все пойдет в конспектном стиле. Так как источники я привожу, то если надо почитать больше и глубже читайте там.

Design –> Get Started –> Desing Principles (Принципы Дизайна)

 

ОЧАРУЙ МЕНЯ


Восхити неожиданным образом

principles_delight 01

Красивые фоны и заставки, правильно применённая анимация и звуки создают приятные ощущения. Утонченные эффекты привносят чувство легкости и  мощи в ваших руках.

 

 

 

Реальные объекты более приятны чем кнопки и меню

principles_real_objects

Позвольте людям непосредственно касаться и манипулировать объектами в вашем приложении. Это уменьшает усилия необходимые для понимания как решить задачу в приложении и в то же время дает эмоциональное удовлетворение.

 

 

Позвольте мне это сделать моим

principles_make_it_mine

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

 

 

Узнай меня

principles_get_to_know_me

Предупреждайте и предугадывайте пожелания людей раньше чем они попросят об этом. Сделайте их предыдущие выборы легко достижимыми.

 

 

 

 

УПРОСТИ МНЕ ЖИЗНЬ


Будте кратки

principles_keep_it_brief

Используйте короткие фразы с простыми словами, так как люди обычно пропускают предложения если они слишком длинные.

 

 

 

Картинки понятней чем слова

principles_pictures

Используйте картинки чтобы представить идею, так как они привлекают внимание людей и более эффективны чем слова.

 

 

 

 

 

 

Решите за меня, но последнее слово оставьте за мной

principles_decide_for_me

Предугадайте желания прежде чем вас спросят, но помните что слишком много вариантов выбора действия могут смутить человека и позвольте ему откатиться обратно если он сделал не правильный выбор.

 

 

 

 

 

 
Показывайте только то, что мне нужно, когда мне это нужно
 
principles_information_when_need_it
Люди напрягаются, когда они видят слишком много и сразу. Разбейте задачи и информацию на небольшие, легко усваиваемые блоки. Скрывайте опции, которые не являются существенными в данный момент.

 

 

 

 

Я должен всегда знать где я

principles_navigation

Дайте людям понимание того где они находятся. Сделайте части вашего приложения различимыми и используйте переходы чтобы показать взаимоотношения между экранами. Обеспечьте легкие возвраты из задачи в задачу.

 

 

Ни когда не теряйте мои штучки

principles_never_lose_stuff Сохраняйте то, на что люди потратили свое время чтобы создать и предоставьте к этому доступ из любой точки мира. Запоминайте настройки и персональные предпочтения на всех телефонах, планшетах и компьютерах пользователя. Это сделает обновление самой простой вещью в мире.

 

 
Если оно выглядит так же, оно должно действовать точно так же
 
principles_looks_same

Помогите людям используя привычные элементы управления. Избегайте модификаций интерфейса которые выглядят одинаково но действуют по разному.

 

 

Прерывай меня, только если это важно

principles_important_interruption

Хороший личный помощник защищает человека от не важных мелочей. Люди хотя быть сосредоточены на своем занятии, поэтому прерывайте их если это только очень важно.

 

 

 

УДИВИ МЕНЯ


Дай мне приемчики, которые работают везде

principles_tricks

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

 

Это не моя вина

principles_error

Будьте вежливы если поправляете людей. Они хотят чувствовать себя умными, когда они используют ваше приложение. Если что-то пойдет не так, дайте четкие инструкции по восстановлению но избавьте  их от технических деталей. Если вы можете это исправить сами за кулисами, то это даже лучше.

 

 

Помогайте

principles_sprinkle_encouragement

Разбейте сложные задачи на простые шаги которые могут быть легко выполнены.  Предоставляйте отзыв на действия, даже если это всего лишь тонкое свечение.

 

 

Сделайте тяжелое подъемным для меня

principles_heavy_lifting

Дайте возможность новичкам чувствовать себя как экспертами, давая им возможность делать то, что они никогда бы и не подумали что смогут. Например, ярлыки, которые сочетают в себе несколько фото эффектов делают любительские фотографии удивительными. И это достигается лишь в несколькими шагами.

 

Сделайте важные вещи быстрыми

principles_make_important_fast

Не все действия равнозначны. Решите что наиболее важно в вашем приложении и сделайте это быстро доступным и используемым, как например кнопка спуска на камере или кнопка паузы в плеере.

 

 

 

Design –> Get Started –> UI Overview (Обзор пользовательского интерфейса)

Здесь буду еще более краток, так как и так все понятно. В данном разделе просто объясняются основные элементы Android UI.

Home screen

All apps screen

Recents screen

ui_overview_home_screen ui_overview_all_apps ui_overview_recents

 

System bars


ui_overview_system_ui

1. Status bar

2. Navigation bar

 

Notifications


ui_overview_notifications

notifications_dismiss

 

 

 

 

 

 

 

 

UI обычного приложения


app_structure_drawer

Странно нарисовались мои заметки, но переделывать лень )

Design –> Style (Стиль)

Создавайте визуально привлекательные приложения, которые будут отлично смотреться на любом устройстве.

design_elements_landing

Design –> Style –> Devices and Displays (Устройства и Дисплеи)

Андроид работает на миллионах телефонов, планшетов и других устройств с различными размерами, форм факторами и разрешениями экранов. Благодаря гибкой системе разметок (layout),  вы можете создавать приложения, которые могут прекрасно отображаться как на больших экранах планшетов, так и на маленьких экранах телефонов.

devices_displays_main

Будьте гибкими

Растягивайте и сжимайте ваши разметки (layouts) для корректного размещения на экранах различной высоты и ширины.

Оптимизируйте разметки (layouts)

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

Ресурсы для всех

Обеспечьте ресурсы для различных разрешений экранов (DPI), чтобы быть уверенными что ваше приложение выглядит отлично на любом устройстве.

Вот тут то как раз и надо сделать небольшое лирическое отступление на тему:

Что такое DPI и что такое PPI в Андроид?

Как я уже объяснял в этой заметке, разрешение экранов телефонов, планшетов и ЖК мониторов измеряется в PPI (pixels per inch). Но в Андроид почему-то везде используется DPI (dots per inch). Немного повторюсь. ЖК экран состоит не из точек, а из пикселей, которые как раз и отображают картинку. Точки картинку отображать не могут. Термин DPI пришел к нам из полиграфии, так как принтеры и т.п. устройства печатают точками, поэтому качество печати выражается в единицах DPI.

Я прочитал кучу буржуйских форумов на эту тему. Там везде пишут, что в Андроид понятия PPI и DPI равнозначны и используются как взаимозаменяемые. Но точно ни кто ни каких объяснений не приводил и не объяснял почему в Андроид используется DPI для обозначения величины плотности или разрешения экрана.

Стратегия

Так с чего же начинать при проектировании для нескольких экранов? Один подход состоит в том, чтобы разработать в базовый стандарт (нормального размера изображения экрана (ширина и высота в пикселях) и MDPI – mideum density = 160dpi) и от этих параметров масштабировать вверх или вниз для других размеров экрана. Другой подход заключается в том, чтобы начать с устройства с большим размером экрана, а затем масштабировать по шкале вниз и найти компромиссы в UI, которые вы должны будете сделать для маленьких экранов.

devices_displays_density@2x

Эти картинки как раз поясняют первую стратегию, которая обычно и используется. Принцип здесь в том, что иконка которая будет хорошо отображаться на экране маленького размера с плотностью допустим 160 DPI, на экране большого размера (640 DPI) будет уже выглядеть очень маленькой и по ней будет очень трудно попасть пальцем.

Design –> Style –> Themes (Темы)

Темы Android – это механизм применения единого стиля оформления для приложения или активности (activity – термин Андроид, код управляющий тем что происходит на экране) . Стиль определяет визуальные свойства элементов пользовательского интерфейса, таких как цвет, высота, отступ и размер шрифта. Чтобы способствовать большему единству между всеми приложениями на платформе, Android предоставляет две системных темы, которые вы можете выбрать при создании приложений:

  • Holo Dark
  • Holo Light

themes_holo_light

themes_holo_dark

Вы можете применять эти темы в своих приложениях и если надо переопределять их.

Design –> Style –> Touch Feedback (Реакция на касание)

Используя подсветку или затемнение реагируйте на прикосновения. Изменяйте поведение приложения в результате использования жестов. Подсвечивайте или выделяйте включенные или отключенные действия.

Реагируйте на прикосновения мягко. Всякий раз, когда пользователь касается для взаимодействия с вашим приложением, дайте ему знать, что приложение "слушает его", путем предоставления визуального ответа на касание. Отзыв на касание можно  тонко обозначить, сделав место прикосновения светлее или темнее, чем нетронутой цвет. Это более приятного, чем вибро отзыв.

Состояния элементов управления

touch_feedback_states

Связь

touch_feedback_manipulationКогда ваши объекты реагируют на более сложные жесты, помогите пользователям понять то, что будет в результате. Например, когда пользователь тащит элемент пальцем влево или вправо, он может затемнятся. Это помогает пользователю понять, что этот элемент может быть удален.

 

 

 

 

Границы

touch_feedback_communication

Например, при прокрутке картинок или списков и по достижении границы в начале или в конце прокручиваемой области, показывайте границы  визуальным сигналом.

 

 

 

 

 

 

Design –> Style –> Metrics and Grids (Сетка размеров)

Устройства отличаются друг от друга не только в физическом смысле, но и в плотности экрана (DPI -точек на дюйм). Для того, чтобы упростить дизайн для нескольких экранов, устройства разделили на две логические группы – по физическому размеру (ширина) и плотности экрана:

  • По размеру экрана это телефоны (handset) у которых размер меньше чем 600 DP, и планшеты (tablets) у которых размер больше или равен 600 DP.
  • По плотности экрана
    LDPI – low density (120dpi)
    MDPI – medium density (160dpi)
    HDPI – hight density (240dpi)
    XHDPI – extra-high density (320dpi)
    XXHDPI – extra-extra!-high density (480dpi)
    XXXHDPI – extra-extra-extra!-high density (640dpi)

По первой группе обратите внимание что единица измерения DP, не путать с DPI.

DP – это density independent pixels, 1DP = 1pixel на экране с плотностью 160 DPI (MDPI экран)

При разработке разметок (layouts) для экранов с различной плотностью пикселей как единица измерения используется именно DP, а не пиксели.

metrics_diagram

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

Размерность 48DP


Сенсорные компоненты UI в основном укладываются в размер 48DP

metrics_48

Почему 48dp?

В среднем, если перевести 48dp на физический размер, то получается около 9 мм. Это удобно в пределах рекомендуемых целевых размеров (7-10 мм) для объектов сенсорного экрана чтобы пользователи могли в них попадать пальцами.

Если вы проектируете элементы, по крайней мере, 48dp высотой и шириной, вы можете гарантировать, что:

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

metrics_closeup

Размер между каждым элементом UI должен быть 8DP.

metrics_forms

Design –> Style –> Typography (Шрифты)

typography_mainПо этой ссылке предлагается скачать шрифт Roboto. Русский там присутствует.

Android позволяет использовать такие традиционные типографские средства для шрифтов, как масштабирование, интервалы,  выравнивание т.д. Шрифт Roboto, создан специально для удовлетворения требований пользовательского интерфейса и экранов с высоким разрешением. Ну типа гугль рекомендует.

 

 

 

 

Шрифты по умолчанию

Пользовательский интерфейс Android  использует следующие стандартные цветовые стили: textColorPrimary и textColorSecondary. Для светлых тем используйте textColorPrimaryInverse и textColorSecondaryInverse. Эти стили уже поддерживают реакцию на касание.

typography_defaults

Масштабирование шрифтов

Чтобы не допускать всякой чехорды со шрифтами Android использует ограниченный набор типоразмеров для шрифтов:

typography_sizes

Пользователи могут выбрать системные коэффициент масштабирования текста в настройках приложения. В целях поддержки этих возможностей тип размера шрифта должен быть указан в масштабно-независимых пикселях (scale-independent pixels) (sp) везде, где это возможно.

1SP = 1PX на экране с плотностью 160DPI

Design –> Style –> Color (Цвет)

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

Design –> Style –> Iconography (Иконография)

iconography_overview

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

При создании иконки для вашего приложения, важно иметь в виду, что приложение может быть установлено на различных устройствах, которые имеют широкий спектр плотности пикселей. Но вы можете заставить ваши иконки отлично выглядеть на всех устройствах, предоставляя для каждой плотности экрана, иконки соответствующих размеров. При запуске приложения Android проверяет характеристики экрана устройства и загружает иконки вашего приложения соответствующие плотности экрана устройства.

Поскольку вам необходимо предоставлять иконки различных размеров для поддержки различных плотностей экранов, проектные рекомендации, приведенные ниже, представлены в единицах dp, которые основаны на размерах пикселя на экранах средней плотности (MDPI).

devices_displays_density@2x

Таким образом, для создания иконки для различных плотностей, вы должны следовать правилу масштабирования 2:3:4:6:8 для пяти начальных плотностей (средней, высокой, x-высокий, xx-высокой и xxx-высокой соответственно). Например, считаем, размер иконки для запуска приложения с экрана должен быть 48x48 dp. Это означает, что для MDPI экрана иконка должны быть 48x48 px (48x1), а для экрана высокой плотности (HDPI)  должна быть в 1,5 раза больше базового размера, то есть 72x72 px (48x1.5), для x-высокая плотность (XHDPI) в 2 раза больше базового размера – 96x96 px (48x2), и так далее.

Внимательно разберитесь между dp и px в абзаце выше.

Launcher (запускатель – если можно так перевести)


Значок запуска является визуальным представлением вашего приложения на главном экране или экране "Приложения". Поскольку пользователь может изменить обои на главном экране, убедитесь, что значок запуска отчетливо виден на любом типе фона.

Размеры и масштаб

Иконка приложения для запуска должна иметь размер 48x48 DP

Иконка приложения для публикации в Google Play должна быть 512x512 PX

Стиль

Используйте отчетливый силуэт и трехмерный вид спереди, как будто слегка смотрите сверху, так чтобы пользователи видели что иконка имеет некоторую глубину.

iconography_launcher_example2

Action Bar (Панель Действий)


Значки панели действий – это графические кнопки, которые представляют собой самые важные действия, которые человек может сделать в рамках вашего приложения. Эти иконки должны использовать простые метафоры, чтобы большинство людей смогли понять, с первого взгляда, их назначение.

Предопределенные символы должны быть использованы для некоторых общих действий, таких как "обновление" и "делиться". Ссылка на скачивание ниже предлагает пакет с иконками, которые масштабируются на экранах для различных плотностей и пригодны для использования с темами Holo Light и Holo Dark. Пакет также включает в себя иконоки, которые вы можете изменить, чтобы они соответствовали вашей теме, в дополнение там есть исходные файлы Adobe Illustrator.

Ссылка на файл набором иконок. Не известно сколько именно ссылка проживет. Лучше обращаться за этим набором на родной сайт в раздел иконография.

iconography_actionbar_size

iconography_actionbar_focal

iconography_actionbar_style

Размеры и масштаб

Размеры иконок панели действий для телефонов должны 32x32 DP

Зона фокуса и пропорции

Общий размер 32x32 DP

Размер значка внутри 24x24 DP

Стиль

Иконки должны быть пиктографические, плоские, не слишком детальные, с плавными изгибами или острыми формами.

Цвета

iconography_actionbar_colors

Colors: #333333
Enabled: 60% opacity
Disabled: 30% opacity

Colors: #FFFFFF
Enabled: 80% opacity
Disabled: 30% opacity

 

 

Маленькие контекстные иконки


В элементах вашего приложения используйте маленькие иконки, например чтобы показать статус отдельного элемента или выделить его из других. Например в Gmail важные сообщения вы можете пометить звездочкой.

iconography_small_size

iconography_small_focal

iconography_small_style

Размеры и масштаб

Маленькие иконки должны быть размером 16x16 DP

Зона фокуса и пропорции

Общий размер 16x16 DP

Размер значка внутри 12x12 DP

Стиль

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

Цвета

iconography_small_example

Не используйте нейтральные цвета. К примеру, Gmail использует желтый цвет иконки звездочки для обозначения важного письма. Для не выбранных элементов используйте цвета близкие к общему фону элемента.

 

 

 

 

Иконки уведомлений


Если ваше приложение генерирует уведомления, создайте иконку, которую система сможет отображать в строке состояния каждый раз, когда выводится новое уведомление.

iconography_notification_size

iconography_notification_focal

iconography_notification_style

iconography_notification_example

Размеры и масштаб

Иконки уведомлений должны иметь размер 24x24 DP

Стиль

Простой и плоский.

Цвета

Значки уведомлений должны быть полностью белым. Кроме того, система может уменьшить и/или затемнить иконку.

 

 

Дизайнерские советы


Вот несколько советов, которые могут оказаться полезными при создании иконок и другой графики для вашего приложения. Эти советы предполагают, что вы используете Adobe Photoshop или аналогичной редактор для растровых и векторных изображений.

Используйте векторные формы везде, где это возможно

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

Начинайте с самого большого изображения

Поскольку вы должны будете создать наборы изображений для экранов различных плотностей, лучше всего начать создание своего значка с наибольшего размера, кратного всей целевой линии размеров иконок. Например, иконки запуска должны быть 48, 72, 96, или 144 пикселей в ширину и высоту, в зависимости от плотности экрана (mdpi, hdpi, xhdpi, и xxhdpi, соответственно). Поэтому, если вы изначально нарисуете иконку запуска размером на 864x864 пикселей, то будет проще, создать иконки меньшей размерности, просто масштабируя исходное изображение вниз целевой лини размеров для окончательного создания всего набора иконок.

При масштабировании, перерисовывайте растровые слои по мере необходимости

Если вы масштабируете изображения из растрового слоя, а не из векторного слоя, эти слои должны быть отрисованы заново вручную, чтобы быть четкими на экранах более высокой плотности. Например, если круг 60х60 px был создан как растровое изображение для mdpi, то его нужно будет переделать в размер 90x90 px для hdpi.

Используйте общие соглашения об именовании графических изображений

Именуйте файлы изображений таким образом, чтобы вам потом самим легко было с ними разобраться, так как изображений будет много. В названии можно использовать префиксы, которые будут указывать на то где и как используется данное изображение. Например:

Asset Type Prefix Example
Icons ic_ ic_star.png
Launcher icons ic_launcher ic_launcher_calendar.png
Menu icons and Action Bar icons ic_menu ic_menu_archive.png
Status bar icons ic_stat_notify ic_stat_notify_msg.png
Tab icons ic_tab ic_tab_recent.png
Dialog icons ic_dialog ic_dialog_info.png

Обратите внимание, что вы не обязаны использовать общий префикс любого типа – это только  лишь предложение для вашего удобства.

Настройте рабочее пространство, чтобы упорядочить файлы по плотности

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

art/...
mdpi/...
_pre_production/...
working_file.psd
finished_asset.png
hdpi/...
_pre_production/...
working_file.psd
finished_asset.png
xhdpi/...
_pre_production/...
working_file.psd
finished_asset.png

Поскольку предложенная структура каталогов, напоминает структуру вашего рабочего пространства в приложении то, вы можете быстро определить, какие изображения должны быть скопированы в каждый каталог ресурсов приложения. Разделение изображений по плотности также помогает обнаружить любые отклонения в именах файлов, что очень важно, поскольку соответствующие ресурсы для различных плотностей должны именоваться тем же именем.


Для сравнения приведем пример структуры каталогов обычного приложения:

res/...
drawable-ldpi/...
finished_asset.png
drawable-mdpi/...
finished_asset.png
drawable-hdpi/...
finished_asset.png
drawable-xhdpi/...
finished_asset.png

Удалите ненужные метаданные из итоговых изображений


Хотя Android SDK автоматически сжимает PNG при упаковке ресурсов приложения все же, рекомендуется удалить ненужные заголовки и метаданные из PNG изображений.


Такие инструменты, как OptiPNG или Pngcrush могут гарантировать, что метаданные удалены, и что ваши изображения оптимизированы по размеру файлов. Но ни кто не мешает использовать и другие подобные приложения.


Для создания некоторых иконок можно использовать онлайн редактор Android Asset Studio.


Design –> Style –> Your Branding (Ваша торговая марка)


Эт переводить не будут, и так все понятно. Тут рекомендации по вашему брендингу.


Design –> Style –> Writing Style (Стиль надписей)


Тут тоже все понятно. Если в двух словах: Краткость сестра таланта!


Улыбка


Но краткость должна быть информативной.


На этом пока пожалуй закончу перевод раздела Design. Возможно потом, если будет время и желание продолжу. Там дальше есть много чего интересного в разделах Design –> Patterns и Design –> Building Blocks.