Вы находитесь на странице: 1из 27

Функциональные

возможности Google Android


при построении интерфейсов

Антон Курицын
javster@i-free.com
30.10.2010
Актуальность разработки под
Android

Широкий спектр устройств,
ориентированных на разные секторы
рынка

Постоянное развитие Android OS

Android замещает собой часть рынка J2ME

Возможность продажи продукта на Google
Market
11/2/10
Рынок труда для Android-
разработчиков

Компании, выпускающие собственные
продукты i-Free, Quickoffice, SPB Software,
Yota, e-Legion, DataArt + компании на
outsourcing

Десятки вакансий на рынке в Петербурге
СЕЙЧАС

Junior Developer: 20-50 тысяч рублей
11/2/10
Некоторые нюансы, связанные с
переходом на платформу Google

Гораздо более обширные возможности при
Android
разработке UI на Android-платформе, по
сравнению с J2ME, Blackberry, Windows Mobile и
Symbian

Вследствие этого, возможность создавать гораздо
более комплексные интерфейсы не прибегая
напрямую к рисованию на Canvas

Наличие одного потока для взаимодействия с UI
11/2/10
Организация интерфейса


Иерархическая
структура
интерфейса

View – базовый
класс для
представления
элементов
интерфейса
11/2/10
View: общая информация

View занимает
прямоугольную область
экрана

Позиционирование View
происходит относительно её
предка

Существует механизм Parent view Child view
расположения View (measure
– layout этап)
11/2/10
Способы задания расположения
элементов

Посредством объявления этих элементов в XML

Создавая объекты непосредственно в коде

Используя одновременно оба подхода

11/2/10
Примеры объявления элементов
Пример описания элемента И в исходном коде:
TextView в XML:
… TextView textView = new TextView(this);
<TextView android:id="@+id/text_view" textView.setText("TextView");
          android:layout_width="wrap_content"
          android:layout_height="wrap_content" LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
          android:text="TextView”/> LayoutParams.WRAP_CONTENT);
… linearLayout.addView(textView, layoutParams);

Результат:

11/2/10
ViewGroup

По иерархии классов наследуется от View

Контейнер для других View

ViewGroup.LayoutParams – средство для
коммуникации между View и её предком

Большое количество базовых реализаций
ViewGroup в Android, задающих различные
алгоритмы расположения элементов
11/2/10
Наследники ViewGroup

Наиболее часто используемые:



LinearLayout

RelativeLayout

FrameLayout

11/2/10
LinearLayout

Располагает элементы друг за другом

Варианты расположения: вертикально и
горизонтально

LinearLayout.LayoutParams позволяет
задавать gravity и weight

11/2/10
LinearLayout: пример
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
layout_gravity=“center”
android:layout_height="fill_parent" Layout_weight=1..3
android:weightSum="5">
<ImageView
android:src="@drawable/title_image"
android:layout_width="wrap_content"
android:layout_weight="3"
android:layout_gravity="center"/>
<ImageView
android:src="@drawable/play_game"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_gravity="center"/>
<ImageView
android:src="@drawable/high_scores"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_gravity="center"/>
</LinearLayout>
LinearLayout

11/2/10
RelativeLayout

Позволяет задавать расположение
элемента относительно других элементов

Типы «зависимостей»: другие элементы,
сам контейнер

11/2/10
RelativeLayout: пример 1
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.ifree.smartive.LocationView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"/>
<com.ifree.smartive.LocationView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
<com.ifree.smartive.DirectionView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
<com.ifree.smartive.CustomButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="20dip"
android:layout_marginLeft="20dip"/>
</RelativeLayout>

11/2/10
RelativeLayout: пример 2
<Button
android:id="@+id/button1"
android:layout_width="wrap_content”
android:layout_height="wrap_content"
android:text="Button 1"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 2"
android:layout_below="@id/button1"
android:layout_toRightOf="@id/button1"/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 3"
android:layout_alignParentLeft="true"
android:layout_below="@id/button2"/>
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 4"
android:layout_below="@id/button3"
android:layout_toRightOf="@id/button3"/>

11/2/10
FrameLayout

View-элементы помещаются в стек и
рисуются одна над другой

Только один атрибут - gravity

11/2/10
FrameLayout: пример
<FrameLayout
xmlns:android=http://schemas.android.com/apk/res/android
android:layout_width=“fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/pals_wailea"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/aim"/>
</FrameLayout>

11/2/10
FrameLayout в стандартной
иерархии
Системный FrameLayout

Вывод иерархии объектов,


построенный утилитой
hierarchyviewer для
предыдущего примера

«Наш» FrameLayout

11/2/10
FrameLayout в стандартной
иерархии
<merge
xmlns:android=http://schemas.android.com/apk/res/android>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/pals_wailea"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/aim"/>
</merge>

Иерархия объектов после


использования тэга merge
11/2/10
Некоторые подклассы ViewGroup

ListView

Gallery

ScrollView

ViewAnimator

DatePicker

etc
11/2/10
Более подробно об этапе
размещения View

На этапах measure-layout, parent
последовательно проходится по своим child
view

LayoutParams используется View, чтобы
сообщить родителю, каких размеров оно
хочет быть: FILL_PARENT (MATCH_PARENT),
WRAP_CONTENT, конкретное значение

MeasureSpecs используется родителем, для
11/2/10
Measure-этап

1. View получает specified width и specified


height от своего Parent
2. В зависимости от режима (AT_MOST,
EXACTLY, UNSPECIFIED), высчитывает свои
размеры
3. View устанавливает measuredWidth и
measuredHeight
11/2/10
Layout-этап

1. Вычисление Parent’ом координат


прямоугольника расположения child-view,
на основании данных полученных на
measure-этапе (measuredWidth и
measuredHeight), данных LayoutParams из
child-view и своих LayoutParams
2. Установка координат child-view
11/2/10
Дополнительные возможности
при построении интерфейсов

Наличие механизма 9-patch

Возможность автоматического
переопределения ресурсов для экранов с
разной разрешающей способностью

Переопределение layout для портретной и
ландшафтной ориентации экрана

Мощный механизм квалификаторов для
11/2/10
Основные плюсы платформы

Наличие мощных механизмов для
формирования сложных интерфейсов

Вследствие пункта 1, гораздо более низкая
трудоёмкость при решении типовых задач

Наличие открытых исходных кодов

Простая интеграция с Java-сервисами

11/2/10
Вопросы

11/2/10
У нас открыты вакансии «Android Developer» и
«Разработчик под мобильные платформы (iPhone,
Blackberry, WM, WP7)»
Обращайтесь в наш HR к Алексею Чайкину
Контакты:
alex.ch@i-free.com
+7 911 1608821
8 (812) 438 1678, доб. 3101

11/2/10

Вам также может понравиться