Разработка мобильных приложений под 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">&lt;b>Hello&lt;/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