Разработка мобильных приложений под Android

advertisement
Разработка
мобильных
приложений
под Android
Чиркунов Кирилл
cyril.chirkunov@computer.org
vk.com/chirkunov
Лекция 2, слайд 1
Сегодняшние темы
•
•
•
•
Жизненный цикл приложения
Activities & Views
Манифест и ресурсы
Класс Application
Новосибирский государственный университет, 2012
Лекция 2, слайд 2
Приложение Android
Активности
Сервисы
Источники данных
(Activities)
(Services)
(Data Sources)
Намерения (Intents)
Виджеты
(Widgets)
Широковещательные приемники
(Broadcast Receivers)
Уведомления
(Notifications)
Новосибирский государственный университет, 2012
Лекция 2, слайд 3
Манифест приложения
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.course_domain.test_app"
android:versionCode="1"
 Xml-файл
android:versionName="0.5 Beta">
[...вложенные
узлы
...]
 Содержит
тэги
компонентов:
</manifest>




Активностей
Сервисов
Источников данных
Широковещательных намерений
С
помощью Фильтров Намерений и
Полномочий определяет
взаимодействие компонентов
Новосибирский государственный университет, 2012
Лекция 2, слайд 4
<uses-configuration android:reqTouchScreen=["finger"]
<uses-feature
android:glEsVersion="0x00010001"
android:reqNavigation=["trackball"]
<uses-sdk android:minSdkVersion="4"
android:reqHardKeyboard=["true"]
android:name="android.hardware.camera“
android:targetSdkVersion="5">
android:reqKeyboardType=["qwerty"]
/></uses-sdk>
Атрибуты:
/>
<uses-configuration android:reqTouchScreen=["finger"]
android:reqNavigation=["trackball"]
 uses-sdk
android:reqHardKeyboard=["true"]
 uses-configuration
android:reqKeyboardType=["twelvekey"]
/>
 uses-feature
Манифест приложения
Новосибирский государственный университет, 2012
Лекция 2, слайд 5
Манифест приложения
<supports-screens android:smallScreens=["false"]
<application
<activity android:name=".TestActivity"
android:icon="@drawable/icon"
android:normalScreens=["true"]
android:label="@string/app_name">
android:theme="@style/test_theme"
Атрибуты:
android:largeScreens=["true"]
<intent-filter>
android:name="TestApplication"
android:anyDensity=["false"]
<action android:name="android.intent.action.MAIN"
android:debuggable="true">
/>
/>
[<category
... вложенные тэги ...]
 support-screens
android:name="android.intent.category.LAUNCHER"/>
</application>
 application
</intent-filter>
</activity>
 activity
Лекция 2, слайд 6
Манифест приложения
<receiver android:enabled="true"
<provider android:permission="com.paad.SOME_PERMISSION"
android:label="Intent Receiver"
Атрибуты:
<service
android:enabled="true"
android:name=".TestContentProvider"
android:name=".TestReceiver">
android:name=".TestService"></service>
android:enabled="true"
</receiver>
android:authorities="com.paad.testapp.TestContentProvider">
 service
 provider
</provider>
 receiver
Новосибирский государственный университет, 2012
Лекция 2, слайд 7
Манифест приложения
<instrumentation android:label="My Test"
<permission android:name="com.paad.DETONATE_DEVICE"
android:name=".TestClass"
<uses-permission
android:protectionLevel="dangerous"
android:targetPackage="com.paad.aPackage">
android:name="android.permission.ACCESS_LOCATION"/>
</instrumentation>
Атрибуты:android:label="Booom!"
android:description="@string/detonate_description">
</permission>
 uses-permission
 permission
 instrumentation
Новосибирский государственный университет, 2012
Лекция 2, слайд 8
Приоритеты приложений
1. Активный процесс
2. Видимый процесс
3. Процесс с работающим сервисом (Service)
4. Фоновый процесс
5. Холостой процесс
Новосибирский государственный университет, 2012
Лекция 2, слайд 9
Ресурсы
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">To Do List</string>
<color name="app_background">#FF0000FF</color>
<dimen name="default_border">5px</dimen>
<array name="string_array">
<item>Item 1</item>
<item>Item 2</item>
<item>Item 3</item>
</array>
<array name="integer_array">
<item>3</item>
<item>2</item>
<item>1</item>
</array>
</resources>
Новосибирский государственный университет, 2012
Лекция 2, слайд 11
Строки
<string name="greating">Hello!</string>
<string name="adv_greating"><b>Hello!</b></string>
<string name="format_greating"><b>Hello</b>, %1$s</string>
String rString = getString(R.string.format_greating);
String fString = String.format(rString, "Vasya Pupkin.");
CharSequence boldString = Html.fromHtml (fString);
Новосибирский государственный университет, 2012
Лекция 2, слайд 12
Цвета
Поддерживаются форматы:
 #RGB
 #RRGGBB
 #ARGB
 #AARRGGBB
<color name=“opaque_blue”>#00F</color>
<color name=“transparent_green”>#7700FF00</color>
Новосибирский государственный университет, 2012
Лекция 2, слайд 12
Размеры






px (экранные пикселы)
in (дюймы)
pt (физические точки)
mm (миллиметры)
dp (аппаратно-независимые пиксели, которые
вычисляются относительно экрана с плотностью 160 dpi)
sp (пикселы, не зависящие от масштаба)
<dimen name=“standard_border”>5dp</dimen>
<dimen name=“large_font_size”>16sp</dimen>
Новосибирский государственный университет, 2012
Лекция 2, слайд 13
Drawable

Растровые изображения (предпочтительный
формат: PNG, но поддерживаются также
JPEG и GIF)

Растягиваемые изображения (NinePatch)

Композитные ресурсы:

LevelListDrawables (XML)

StateListDrawables (XML)
Новосибирский государственный университет, 2012
Лекция 2, слайд 14
Разметка
<?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"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="MY STROILI, STROILI. I NAKONEC
POSTROILI!"
/>
</LinearLayout>
Новосибирский государственный университет, 2012
Лекция 2, слайд 15
Анимация,
основанная на расчете
промежуточных кадров
Тип анимации
Alpha
Scale
Translate
Rotate
Атрибуты
Допустимые
значения
fromAlpha/toAlpha
Float от 0 до 1
fromXScale/toXScale
Float от 0 до 1
fromXScale/toXScale
Float от 0 до 1
pivotX/pivotY
В % от 0 до 100
fromX/toX
Float от 0 до 1
fromY/toY
Float от 0 до 1
fromDegrees/toDegrees
Float от 0 до 360
pivotX/pivotY
В % от 0 до 100
Новосибирский государственный университет, 2012
Лекция 2, слайд 16
Анимация,
основанная на расчете
промежуточных кадров
Комбинирование разных экземпляров
анимации при помощи типа/тэга set
Атрибуты тэга





duration
startOffset
fillBefore
fillAfter
interpolator
Общий вид: android:anim/interpolatorName
Новосибирский государственный университет, 2012
Лекция 2, слайд 17
Анимация,
основанная на расчете промежуточных кадров
Пример:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:startOffset="700">
<scale
android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />
<rotate
android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />
</set>
Новосибирский государственный университет, 2012
Анимация
пошаговая
Лекция 2, слайд 18
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/rocket_thrust1"
android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2"
android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3"
android:duration="200" />
</animation-list>
Новосибирский государственный университет, 2012
Лекция 2, слайд 19
Использование ресурсов в коде
//Загрузка ресурса
setContentView(R.layout.main);
// Отображение всплывающего диалогового окна
// выводит строковый ресурс в качестве сообщения об ошибке
Toast.makeText(this, R.string.app_error, Toast.LENGTH_LONG).show();
//Получение выборки значений разного типа из ресурсов
Resources myResources = getResources();
CharSequence styledText = myResources.getText(R.string.greating);
Drawable icon = myResources.getDrawable(R.drawable.app_icon);
int opaqueBlue = myResources.getColor(R.color.opaque_blue);
float borderWidth = myResources.getDimension(R.dimen.standard_border);
Animation transOut;
transOut = AnimationUtils.loadAnimation(this, R.anim.scale_rotate);
String[] stringArray;
stringArray = myResources.getStringArray(R.array.string_array);
int[] intArray;
intArray = myResources.getIntArray(R.array.integer_array);
AnimationDrawable rocket;
rocket =
(AnimationDrawable)myResources.getDrawable(R.drawable.frame_by_frame);
Новосибирский государственный университет, 2012
Лекция 2, слайд 20
Вложенные ресурсы
attribute=“@[packagename:]resourcetype/resourceidentifier”
Пример:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="@dimen/standard_border">
<EditText
android:id="@+id/myEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/greeting"
android:textColor="@color/opaque_blue"
/>
</LinearLayout>
Новосибирский государственный университет, 2012
Лекция 2, слайд 21
Системные ресурсы
Доступ из кода:
CharSequence httpError = getString(android.R.string.httpErrorBadUri)
Доступ внутри XML:
<EditText
android:id="@+id/myEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@android:string/httpErrorBarUrl"
android:textColor="@android:color/darker_gray"
/>
Новосибирский государственный университет, 2012
Лекция 2, слайд 22
Доступ к визуальным стилям
<EditText
android:id="@+id/myEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/greeting"
android:textColor="?android:textColor"
/>
Новосибирский государственный университет, 2012
Лекция 2, слайд 23
Ресурсы для разных языковых
настроек и конфигураций
Спецификаторы, которые можно применить для
представления альтернативных значений в ресурсах:
 MCC/MNC


Язык и регион


en, en-rUS, en-rGB и др.
Размер экрана


mcc234, mcc310-mnc20 и т.д.
small, medium, large
Высота и ширина экрана


Ориентация экрана в пространстве


long, notlong
port, land
Плотность пикселов на экране

в dpi
Новосибирский государственный университет, 2012
Лекция 2, слайд 24
Ресурсы для разных языковых
настроек и конфигураций
Спецификаторы, которые можно применить для
представления альтернативных значений в ресурсах:
(продолжение)
 Тип сенсорного экрана
 notouch, stylus, finger
 Наличие клавиатуры
 keysexposed, keyshidden, keysoft
 Тип ввода
 nokeys, qwerty или 12key
 Способ навигации
 nonav, dpad, trackball, wheel
Пример: drawable-en-rUS, drawable-en-keyshidden
Новосибирский государственный университет, 2012
Лекция 2, слайд 25
Application
 onCreate
 onTerminate
 onLowMemory
 onConfigurationChanged
 getInstance
 getGlobalStateValue
 setGlobalStateValue
Новосибирский государственный университет, 2012
Лекция 2, слайд 26
Активности
Стек активностей
Новая
активность
Активность на
переднем плане
Активность, которая
была последней на
переднем плане
…
Закрывается,
чтобы
освободить
ресурсы
Предыдущие активности
Новосибирский государственный университет, 2012
Лекция 2, слайд 27
Состояния Активностей
Активное
Приостановленное
Остановленное
Неактивное
Новосибирский государственный университет, 2012
Лекция 2, слайд 28
Обработчики активностей
onRestoreInstanceState
onResume
onCreate
onRestore
InstanceState
onPause
onStop
onStart
onDestroy
onRestart
Активное состояние
Видимое состояние
Полноценное состояние
Работа активности
может быть прервана
Новосибирский государственный университет, 2012
Лекция 2, слайд 29
Классы Activity
MapActivity
ListActivity
ExpandableListActivity
TabActivity
Новосибирский государственный университет, 2012
Лекция 2, слайд 30
На следующей лекции
• Основные элементы
пользовательского интерфейса
• Представления
• Компоновка элементов на экране
• Динамические меню
• И пр.
Новосибирский государственный университет, 2012
Лекция 2, слайд 31
Новосибирский государственный университет, 2012
Download