SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Paul Malikov
 http://about.me/vokilam


           Первый опыт: Android SDK
содержание
• жизненный цикл Activity
• странности особенности процесса
  разработки
• полезная литература
• жизненный цикл Activity
запуск Activity
   // start activity from ListingsActivity
Intent i = new Intent(ListingActivity.this, WebActivity.class);
i.putExtra("url", v.getRestaurantUrl());
i.putExtra("crmid", v.getVenueCRMID());
startActivity(i);




// process intent extras from WebActivity
Bundle b = getIntent().getExtras();
String url;

if (b != null) {
    url = b.getString("url");
    mCRMID = b.getString("crmid");
}
android manifest
   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      android:versionCode="1"
      android:versionName="1.0" package="com.menulog.m">
    <application android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:debuggable="true">
        <activity
            android:name=".HomeActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity
            android:name=".ListingActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait">
android manifest
    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
       android:versionCode="1"
       android:versionName="1.0" package="com.menulog.m">
     <application android:icon="@drawable/icon"
         android:label="@string/app_name"
         android:debuggable="true">
         <activity
  Application does not have the
             android:name=".HomeActivity"
  attribute 'debuggable' set to TRUE
             android:label="@string/app_name"
  in its manifest and cannot be
  debugged. android:screenOrientation="portrait">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
         </activity>
         <activity
             android:name=".ListingActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait">
android manifest
    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
       android:versionCode="1"
       android:versionName="1.0" package="com.menulog.m">
     <application android:icon="@drawable/icon"
         android:label="@string/app_name"
         android:debuggable="true">
         <activity
  Application does not have the
             android:name=".HomeActivity"
  attribute 'debuggable' set to TRUE
             android:label="@string/app_name"
  in its manifest and cannot be
  debugged. android:screenOrientation="portrait">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
         </activity>
         <activity
             android:name=".ListingActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait">
android manifest
            <activity
             android:name=".ListingActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait">
        </activity>
        <activity android:name=".MapViewActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait"/>
        <uses-library android:name="com.google.android.maps" />
    </application>
    <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7"
        android:targetSdkVersion="7"></uses-sdk>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
android manifest
            <activity
             android:name=".ListingActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait">
        </activity>
        <activity android:name=".MapViewActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait"/>
        <uses-library android:name="com.google.android.maps" />
    </application>
    <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7"
        android:targetSdkVersion="7"></uses-sdk>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
android manifest
            <activity
             android:name=".ListingActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait">
        </activity>
        <activity android:name=".MapViewActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait"/>
        <uses-library android:name="com.google.android.maps" />
    </application>
    <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7"
        android:targetSdkVersion="7"></uses-sdk>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
android manifest
            <activity
             android:name=".ListingActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait">
        </activity>
        <activity android:name=".MapViewActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait"/>
        <uses-library android:name="com.google.android.maps" />
    </application>
    <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7"
        android:targetSdkVersion="7"></uses-sdk>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
android manifest
            <activity
             android:name=".ListingActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait">
        </activity>
        <activity android:name=".MapViewActivity"
             android:label="@string/app_name"
             android:screenOrientation="portrait"/>
        <uses-library android:name="com.google.android.maps" />
    </application>
    <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7"
        android:targetSdkVersion="7"></uses-sdk>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
android manifest
• не забывайте добавлять тег    <activity />
  при создании нового класса Activity
• не забывайте указывать разрешения
  <uses-permission />   для вашего
  приложения
• будьте внимательны
layouts
  <?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="@string/hello"
    />
</LinearLayout>
layouts
•   FrameLayout
•   LinearLayout
•   RelativeLayout
•   TableLayout
layouts
• не забывайте определять атрибуты
  layout_width, layout_height   или
  использовать стили
• не используйте AbsoluteLayout
• используйте dp (density pixels) и sp
  (scalable pixels) вместо px
9-patch images
                  Stretchable area




Padding box (optional)
9-patch images
    with padding box
9-patch images
                 with padding box


<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/button_bg"
    android:text="hello, cruel world!"
    android:gravity="right"
    />
9-patch images
                 with padding box


<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/button_bg"
    android:text="hello, cruel world!"
    android:gravity="right"
    />
9-patch images
                 with padding box


<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/button_bg"
    android:text="hello, cruel world!"
    android:gravity="right"
    />
9-patch images
                 with padding box


<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/button_bg"
    android:text="hello, cruel world!"
    android:gravity="right"
    />
9-patch images
      without padding box
9-patch images
      without padding box
9-patch images
         without padding box




android:padding="0dp"
9-patch images
         without padding box




android:padding="0dp"
9-patch images
• информация 9-patch располагается на
  однопиксельной белой (#FFFF) или
  прозрачной (#FFF0) рамке в виде рядов
  черных (#000F) пикселей
• при масштабировании такого
  изображения редактор может сглаживать
  границы - появление серых пикселей
• ./tools/draw9patch неудобный
9-patch images
                   android:padding="0dp"
• информация 9-patch располагается на
  однопиксельной белой (#FFFF) или
  прозрачной (#FFF0) рамке в виде рядов
  черных (#000F) пикселей
• при масштабировании такого
  изображения редактор может сглаживать
  границы - появление серых пикселей
• ./tools/draw9patch неудобный
google maps
•   для нормальной работы необходим Maps API key

•   для этого нужно получить MD5 Fingerprint
    сертификата вашего приложения

•   и зарегистрировать MD5 Fingerprint в Google
    Maps Service

•   указать ключ при создании карты
    mMapView = new MapView(this, "example_Maps_ApiKey_String");
слои google maps
• OverlayItem (точка)
• ItemizedOverlay (массив точек)
• Ваш собственный (extends Overlay)
• Координаты задаются в формате
       (int) degree * 1e6
soft keyboard
• программный вызов работает в одном
  Activity и не работает в другом (?)
  InputMethodManager mgr =
     (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
  mgr.showSoftInput(mSearchField, InputMethodManager.SHOW_IMPLICIT);



• как узнать, что пользователь свернул
  клавиатуру?
dialogs & menus
•   программное управление multiple choice dialog (?)

•   AlertDialog.Builder удобно
    builder.setTitle(R.string.choose_country);

    builder.setSingleChoiceItems(
        countryNames,
        index,
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
            }
        });
    dialog = builder.create();
dialogs & menus
•   диалоги и меню кэшируются системой. чтобы
    внести изменения в существующие объекты,
    используются
     onPrepareDilaog()
     onPrepareOptionsMenu()


•   видимость диалога управляется методами Activity
     showDialog(int id)
     dismissDialog(int id)
     removeDialog(int id)
ресурсы
• мощный инструмент выбора ресурсов
  основывается на различных критериях
• используется для локализации,
  поддержки ориентации дисплея,
  поддержки разных форматов дисплеев,
  клавиатуры
ресурсы
• drawable-mcc257-mnc02
• values-ru
• values-ru-ldpi-qwerty-v7
• layout-port
• menu-car-notnight
ресурсы
•   критерии должны разделяться символом ‘-’ и
    следовать в порядке убывания приоритета
    (приоритеты описаны в DevGuide)

•   только одно значение критерия допускается в
    названии: values-ru-en => values-ru, values-en

•   обращайте внимание на именование файлов, в
    частности для изображений:
    res/drawable-mdpi/Untitled6.9.png: Invalid file name: must contain only
    [a-z0-9_.]
логи
•    Log.v(String, String)
        verbose
        debug
        info
        warn
        error
•    Toast
    Toast.makeText(getApplicationContext(), R.string.msg,
        Toast.LENGTH_LONG).show();
emulator
• можно собрать устройство с любой
  конфигурацией
• медленный
• отсутствуют настройки и описание
  горячих клавиш
• Ctrl + F12 переключиться в landscape
  режим
emulator
• устройства с hdpi дисплеем могут не
  помещаться на экран
• масштаб эмулятора задается через AVD
  Manager
emulator
• устройства с hdpi дисплеем могут не
  помещаться на экран
• масштаб эмулятора задается через AVD
  Manager
emulator
• устройства с hdpi дисплеем могут не
  помещаться на экран
• масштаб эмулятора задается через AVD
  Manager
литература
•   http://developer.android.com (DevGuide,
    Resources, Reference,Videos)

•   Professoinal Android 2 Application Development
    ISBN-13: 978-0-470-56552-0

•   Google I/O Moblile Sessions

•   Thinking In Java, 4th Edition ISBN 0-13-187248-6

•   Effective Java, 2nd Edition ISBN-13:
    978-0-321-35668-0, ISBN-10:	

0-321-35668-3

Contenu connexe

En vedette

[JAM 1.0] Intro (Paul Malikov)
[JAM 1.0] Intro (Paul Malikov)[JAM 1.0] Intro (Paul Malikov)
[JAM 1.0] Intro (Paul Malikov)Evgeny Kaziak
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)Evgeny Kaziak
 
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)Evgeny Kaziak
 
Part iii sec.2 ppt.
Part iii sec.2 ppt.Part iii sec.2 ppt.
Part iii sec.2 ppt.dhtay
 
[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)Evgeny Kaziak
 
Bombay primary education act
Bombay primary education actBombay primary education act
Bombay primary education actRitesh Vaniya
 
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)Evgeny Kaziak
 
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)Evgeny Kaziak
 
[JAM 1.1] Geo Champs (Mashpit Team)
[JAM 1.1] Geo Champs (Mashpit Team)[JAM 1.1] Geo Champs (Mashpit Team)
[JAM 1.1] Geo Champs (Mashpit Team)Evgeny Kaziak
 
Clements World Part III, Sec 1
Clements World Part III, Sec 1Clements World Part III, Sec 1
Clements World Part III, Sec 1dhtay
 
[JAM 1.2] HTML5 (Alexei Yanochkin)
[JAM 1.2] HTML5 (Alexei Yanochkin)[JAM 1.2] HTML5 (Alexei Yanochkin)
[JAM 1.2] HTML5 (Alexei Yanochkin)Evgeny Kaziak
 
Secondary education-act-1972
Secondary education-act-1972Secondary education-act-1972
Secondary education-act-1972Ritesh Vaniya
 
[JAM 1.2] Intro (Paul Malikov)
[JAM 1.2] Intro (Paul Malikov)[JAM 1.2] Intro (Paul Malikov)
[JAM 1.2] Intro (Paul Malikov)Evgeny Kaziak
 
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)Evgeny Kaziak
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)Evgeny Kaziak
 

En vedette (15)

[JAM 1.0] Intro (Paul Malikov)
[JAM 1.0] Intro (Paul Malikov)[JAM 1.0] Intro (Paul Malikov)
[JAM 1.0] Intro (Paul Malikov)
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
 
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
 
Part iii sec.2 ppt.
Part iii sec.2 ppt.Part iii sec.2 ppt.
Part iii sec.2 ppt.
 
[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)
 
Bombay primary education act
Bombay primary education actBombay primary education act
Bombay primary education act
 
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
[JAM 1.2] Testing in Android (Dzmitry Ivashnev)
 
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
 
[JAM 1.1] Geo Champs (Mashpit Team)
[JAM 1.1] Geo Champs (Mashpit Team)[JAM 1.1] Geo Champs (Mashpit Team)
[JAM 1.1] Geo Champs (Mashpit Team)
 
Clements World Part III, Sec 1
Clements World Part III, Sec 1Clements World Part III, Sec 1
Clements World Part III, Sec 1
 
[JAM 1.2] HTML5 (Alexei Yanochkin)
[JAM 1.2] HTML5 (Alexei Yanochkin)[JAM 1.2] HTML5 (Alexei Yanochkin)
[JAM 1.2] HTML5 (Alexei Yanochkin)
 
Secondary education-act-1972
Secondary education-act-1972Secondary education-act-1972
Secondary education-act-1972
 
[JAM 1.2] Intro (Paul Malikov)
[JAM 1.2] Intro (Paul Malikov)[JAM 1.2] Intro (Paul Malikov)
[JAM 1.2] Intro (Paul Malikov)
 
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
 

Similaire à [JAM 1.0] Android OS, Java (Paul Malikov)

Yandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим ХромцовYandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим ХромцовMeetup.by
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Noveo
 
Android M: опыт личного знакомства
Android M: опыт личного знакомстваAndroid M: опыт личного знакомства
Android M: опыт личного знакомстваRambler Android
 
Android - 08 - Action bar
Android - 08 - Action barAndroid - 08 - Action bar
Android - 08 - Action barNoveo
 
Appium для народа
Appium для народаAppium для народа
Appium для народаSQALab
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...metaform
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Noveo
 
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...JSFestUA
 
Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1Empatika
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Noveo
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
 
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,..."Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...it-people
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Kirill Rozov
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusGlobus
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusGlobus
 

Similaire à [JAM 1.0] Android OS, Java (Paul Malikov) (20)

Yandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим ХромцовYandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим Хромцов
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Lec 10
Lec 10Lec 10
Lec 10
 
Android M: опыт личного знакомства
Android M: опыт личного знакомстваAndroid M: опыт личного знакомства
Android M: опыт личного знакомства
 
Android - 08 - Action bar
Android - 08 - Action barAndroid - 08 - Action bar
Android - 08 - Action bar
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 
Appium для народа
Appium для народаAppium для народа
Appium для народа
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
 
Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,..."Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", Globus
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", Globus
 

[JAM 1.0] Android OS, Java (Paul Malikov)

  • 1. Paul Malikov http://about.me/vokilam Первый опыт: Android SDK
  • 2. содержание • жизненный цикл Activity • странности особенности процесса разработки • полезная литература
  • 4. запуск Activity // start activity from ListingsActivity Intent i = new Intent(ListingActivity.this, WebActivity.class); i.putExtra("url", v.getRestaurantUrl()); i.putExtra("crmid", v.getVenueCRMID()); startActivity(i); // process intent extras from WebActivity Bundle b = getIntent().getExtras(); String url; if (b != null) { url = b.getString("url"); mCRMID = b.getString("crmid"); }
  • 5. android manifest <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.menulog.m"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity android:name=".HomeActivity" android:label="@string/app_name" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".ListingActivity" android:label="@string/app_name" android:screenOrientation="portrait">
  • 6. android manifest <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.menulog.m"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity Application does not have the android:name=".HomeActivity" attribute 'debuggable' set to TRUE android:label="@string/app_name" in its manifest and cannot be debugged. android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".ListingActivity" android:label="@string/app_name" android:screenOrientation="portrait">
  • 7. android manifest <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.menulog.m"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity Application does not have the android:name=".HomeActivity" attribute 'debuggable' set to TRUE android:label="@string/app_name" in its manifest and cannot be debugged. android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".ListingActivity" android:label="@string/app_name" android:screenOrientation="portrait">
  • 8. android manifest <activity android:name=".ListingActivity" android:label="@string/app_name" android:screenOrientation="portrait"> </activity> <activity android:name=".MapViewActivity" android:label="@string/app_name" android:screenOrientation="portrait"/> <uses-library android:name="com.google.android.maps" /> </application> <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7" android:targetSdkVersion="7"></uses-sdk> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> </manifest>
  • 9. android manifest <activity android:name=".ListingActivity" android:label="@string/app_name" android:screenOrientation="portrait"> </activity> <activity android:name=".MapViewActivity" android:label="@string/app_name" android:screenOrientation="portrait"/> <uses-library android:name="com.google.android.maps" /> </application> <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7" android:targetSdkVersion="7"></uses-sdk> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> </manifest>
  • 10. android manifest <activity android:name=".ListingActivity" android:label="@string/app_name" android:screenOrientation="portrait"> </activity> <activity android:name=".MapViewActivity" android:label="@string/app_name" android:screenOrientation="portrait"/> <uses-library android:name="com.google.android.maps" /> </application> <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7" android:targetSdkVersion="7"></uses-sdk> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> </manifest>
  • 11. android manifest <activity android:name=".ListingActivity" android:label="@string/app_name" android:screenOrientation="portrait"> </activity> <activity android:name=".MapViewActivity" android:label="@string/app_name" android:screenOrientation="portrait"/> <uses-library android:name="com.google.android.maps" /> </application> <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7" android:targetSdkVersion="7"></uses-sdk> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> </manifest>
  • 12. android manifest <activity android:name=".ListingActivity" android:label="@string/app_name" android:screenOrientation="portrait"> </activity> <activity android:name=".MapViewActivity" android:label="@string/app_name" android:screenOrientation="portrait"/> <uses-library android:name="com.google.android.maps" /> </application> <uses-sdk android:maxSdkVersion="8" android:minSdkVersion="7" android:targetSdkVersion="7"></uses-sdk> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> </manifest>
  • 13. android manifest • не забывайте добавлять тег <activity /> при создании нового класса Activity • не забывайте указывать разрешения <uses-permission /> для вашего приложения • будьте внимательны
  • 14. layouts <?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="@string/hello" /> </LinearLayout>
  • 15. layouts • FrameLayout • LinearLayout • RelativeLayout • TableLayout
  • 16. layouts • не забывайте определять атрибуты layout_width, layout_height или использовать стили • не используйте AbsoluteLayout • используйте dp (density pixels) и sp (scalable pixels) вместо px
  • 17. 9-patch images Stretchable area Padding box (optional)
  • 18. 9-patch images with padding box
  • 19. 9-patch images with padding box <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/button_bg" android:text="hello, cruel world!" android:gravity="right" />
  • 20. 9-patch images with padding box <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/button_bg" android:text="hello, cruel world!" android:gravity="right" />
  • 21. 9-patch images with padding box <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/button_bg" android:text="hello, cruel world!" android:gravity="right" />
  • 22. 9-patch images with padding box <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/button_bg" android:text="hello, cruel world!" android:gravity="right" />
  • 23. 9-patch images without padding box
  • 24. 9-patch images without padding box
  • 25. 9-patch images without padding box android:padding="0dp"
  • 26. 9-patch images without padding box android:padding="0dp"
  • 27. 9-patch images • информация 9-patch располагается на однопиксельной белой (#FFFF) или прозрачной (#FFF0) рамке в виде рядов черных (#000F) пикселей • при масштабировании такого изображения редактор может сглаживать границы - появление серых пикселей • ./tools/draw9patch неудобный
  • 28. 9-patch images android:padding="0dp" • информация 9-patch располагается на однопиксельной белой (#FFFF) или прозрачной (#FFF0) рамке в виде рядов черных (#000F) пикселей • при масштабировании такого изображения редактор может сглаживать границы - появление серых пикселей • ./tools/draw9patch неудобный
  • 29. google maps • для нормальной работы необходим Maps API key • для этого нужно получить MD5 Fingerprint сертификата вашего приложения • и зарегистрировать MD5 Fingerprint в Google Maps Service • указать ключ при создании карты mMapView = new MapView(this, "example_Maps_ApiKey_String");
  • 30. слои google maps • OverlayItem (точка) • ItemizedOverlay (массив точек) • Ваш собственный (extends Overlay) • Координаты задаются в формате (int) degree * 1e6
  • 31. soft keyboard • программный вызов работает в одном Activity и не работает в другом (?) InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(mSearchField, InputMethodManager.SHOW_IMPLICIT); • как узнать, что пользователь свернул клавиатуру?
  • 32. dialogs & menus • программное управление multiple choice dialog (?) • AlertDialog.Builder удобно builder.setTitle(R.string.choose_country); builder.setSingleChoiceItems( countryNames, index, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { } }); dialog = builder.create();
  • 33. dialogs & menus • диалоги и меню кэшируются системой. чтобы внести изменения в существующие объекты, используются onPrepareDilaog() onPrepareOptionsMenu() • видимость диалога управляется методами Activity showDialog(int id) dismissDialog(int id) removeDialog(int id)
  • 34. ресурсы • мощный инструмент выбора ресурсов основывается на различных критериях • используется для локализации, поддержки ориентации дисплея, поддержки разных форматов дисплеев, клавиатуры
  • 35. ресурсы • drawable-mcc257-mnc02 • values-ru • values-ru-ldpi-qwerty-v7 • layout-port • menu-car-notnight
  • 36. ресурсы • критерии должны разделяться символом ‘-’ и следовать в порядке убывания приоритета (приоритеты описаны в DevGuide) • только одно значение критерия допускается в названии: values-ru-en => values-ru, values-en • обращайте внимание на именование файлов, в частности для изображений: res/drawable-mdpi/Untitled6.9.png: Invalid file name: must contain only [a-z0-9_.]
  • 37. логи • Log.v(String, String) verbose debug info warn error • Toast Toast.makeText(getApplicationContext(), R.string.msg, Toast.LENGTH_LONG).show();
  • 38. emulator • можно собрать устройство с любой конфигурацией • медленный • отсутствуют настройки и описание горячих клавиш • Ctrl + F12 переключиться в landscape режим
  • 39. emulator • устройства с hdpi дисплеем могут не помещаться на экран • масштаб эмулятора задается через AVD Manager
  • 40. emulator • устройства с hdpi дисплеем могут не помещаться на экран • масштаб эмулятора задается через AVD Manager
  • 41. emulator • устройства с hdpi дисплеем могут не помещаться на экран • масштаб эмулятора задается через AVD Manager
  • 42. литература • http://developer.android.com (DevGuide, Resources, Reference,Videos) • Professoinal Android 2 Application Development ISBN-13: 978-0-470-56552-0 • Google I/O Moblile Sessions • Thinking In Java, 4th Edition ISBN 0-13-187248-6 • Effective Java, 2nd Edition ISBN-13: 978-0-321-35668-0, ISBN-10: 0-321-35668-3