Paul Malikov http://about.me/vokilam           Первый опыт: Android SDK
содержание• жизненный цикл Activity• странности особенности процесса  разработки• полезная литература
• жизненный цикл Activity
запуск Activity   // start activity from ListingsActivityIntent i = new Intent(ListingActivity.this, WebActivity.class);i....
android manifest   <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/andro...
android manifest    <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/andr...
android manifest    <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/andr...
android manifest            <activity             android:name=".ListingActivity"             android:label="@string/app_n...
android manifest            <activity             android:name=".ListingActivity"             android:label="@string/app_n...
android manifest            <activity             android:name=".ListingActivity"             android:label="@string/app_n...
android manifest            <activity             android:name=".ListingActivity"             android:label="@string/app_n...
android manifest            <activity             android:name=".ListingActivity"             android:label="@string/app_n...
android manifest• не забывайте добавлять тег    <activity />  при создании нового класса Activity• не забывайте указывать ...
layouts  <?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"...
layouts•   FrameLayout•   LinearLayout•   RelativeLayout•   TableLayout
layouts• не забывайте определять атрибуты  layout_width, layout_height   или  использовать стили• не используйте AbsoluteL...
9-patch images                  Stretchable areaPadding box (optional)
9-patch images    with padding box
9-patch images                 with padding box<Button    android:layout_width="fill_parent"    android:layout_height="wra...
9-patch images                 with padding box<Button    android:layout_width="fill_parent"    android:layout_height="wra...
9-patch images                 with padding box<Button    android:layout_width="fill_parent"    android:layout_height="wra...
9-patch images                 with padding box<Button    android:layout_width="fill_parent"    android:layout_height="wra...
9-patch images      without padding box
9-patch images      without padding box
9-patch images         without padding boxandroid:padding="0dp"
9-patch images         without padding boxandroid:padding="0dp"
9-patch images• информация 9-patch располагается на  однопиксельной белой (#FFFF) или  прозрачной (#FFF0) рамке в виде ряд...
9-patch images                   android:padding="0dp"• информация 9-patch располагается на  однопиксельной белой (#FFFF) ...
google maps•   для нормальной работы необходим Maps API key•   для этого нужно получить MD5 Fingerprint    сертификата ваш...
слои google maps• OverlayItem (точка)• ItemizedOverlay (массив точек)• Ваш собственный (extends Overlay)• Координаты задаю...
soft keyboard• программный вызов работает в одном  Activity и не работает в другом (?)  InputMethodManager mgr =     (Inpu...
dialogs & menus•   программное управление multiple choice dialog (?)•   AlertDialog.Builder удобно    builder.setTitle(R.s...
dialogs & menus•   диалоги и меню кэшируются системой. чтобы    внести изменения в существующие объекты,    используются  ...
ресурсы• мощный инструмент выбора ресурсов  основывается на различных критериях• используется для локализации,  поддержки ...
ресурсы• drawable-mcc257-mnc02• values-ru• values-ru-ldpi-qwerty-v7• layout-port• menu-car-notnight
ресурсы•   критерии должны разделяться символом ‘-’ и    следовать в порядке убывания приоритета    (приоритеты описаны в ...
логи•    Log.v(String, String)        verbose        debug        info        warn        error•    Toast    Toast.makeTex...
emulator• можно собрать устройство с любой  конфигурацией• медленный• отсутствуют настройки и описание  горячих клавиш• Ct...
emulator• устройства с hdpi дисплеем могут не  помещаться на экран• масштаб эмулятора задается через AVD  Manager
emulator• устройства с hdpi дисплеем могут не  помещаться на экран• масштаб эмулятора задается через AVD  Manager
emulator• устройства с hdpi дисплеем могут не  помещаться на экран• масштаб эмулятора задается через AVD  Manager
литература•   http://developer.android.com (DevGuide,    Resources, Reference,Videos)•   Professoinal Android 2 Applicatio...
Upcoming SlideShare
Loading in …5
×

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

2,296 views
2,217 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,296
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
55
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. Paul Malikov http://about.me/vokilam Первый опыт: Android SDK
  2. 2. содержание• жизненный цикл Activity• странности особенности процесса разработки• полезная литература
  3. 3. • жизненный цикл Activity
  4. 4. запуск Activity // start activity from ListingsActivityIntent i = new Intent(ListingActivity.this, WebActivity.class);i.putExtra("url", v.getRestaurantUrl());i.putExtra("crmid", v.getVenueCRMID());startActivity(i);// process intent extras from WebActivityBundle b = getIntent().getExtras();String url;if (b != null) { url = b.getString("url"); mCRMID = b.getString("crmid");}
  5. 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. 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. 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. 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. 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. 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. 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. 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. 13. android manifest• не забывайте добавлять тег <activity /> при создании нового класса Activity• не забывайте указывать разрешения <uses-permission /> для вашего приложения• будьте внимательны
  14. 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. 15. layouts• FrameLayout• LinearLayout• RelativeLayout• TableLayout
  16. 16. layouts• не забывайте определять атрибуты layout_width, layout_height или использовать стили• не используйте AbsoluteLayout• используйте dp (density pixels) и sp (scalable pixels) вместо px
  17. 17. 9-patch images Stretchable areaPadding box (optional)
  18. 18. 9-patch images with padding box
  19. 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. 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. 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. 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. 23. 9-patch images without padding box
  24. 24. 9-patch images without padding box
  25. 25. 9-patch images without padding boxandroid:padding="0dp"
  26. 26. 9-patch images without padding boxandroid:padding="0dp"
  27. 27. 9-patch images• информация 9-patch располагается на однопиксельной белой (#FFFF) или прозрачной (#FFF0) рамке в виде рядов черных (#000F) пикселей• при масштабировании такого изображения редактор может сглаживать границы - появление серых пикселей• ./tools/draw9patch неудобный
  28. 28. 9-patch images android:padding="0dp"• информация 9-patch располагается на однопиксельной белой (#FFFF) или прозрачной (#FFF0) рамке в виде рядов черных (#000F) пикселей• при масштабировании такого изображения редактор может сглаживать границы - появление серых пикселей• ./tools/draw9patch неудобный
  29. 29. google maps• для нормальной работы необходим Maps API key• для этого нужно получить MD5 Fingerprint сертификата вашего приложения• и зарегистрировать MD5 Fingerprint в Google Maps Service• указать ключ при создании карты mMapView = new MapView(this, "example_Maps_ApiKey_String");
  30. 30. слои google maps• OverlayItem (точка)• ItemizedOverlay (массив точек)• Ваш собственный (extends Overlay)• Координаты задаются в формате (int) degree * 1e6
  31. 31. soft keyboard• программный вызов работает в одном Activity и не работает в другом (?) InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(mSearchField, InputMethodManager.SHOW_IMPLICIT);• как узнать, что пользователь свернул клавиатуру?
  32. 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. 33. dialogs & menus• диалоги и меню кэшируются системой. чтобы внести изменения в существующие объекты, используются onPrepareDilaog() onPrepareOptionsMenu()• видимость диалога управляется методами Activity showDialog(int id) dismissDialog(int id) removeDialog(int id)
  34. 34. ресурсы• мощный инструмент выбора ресурсов основывается на различных критериях• используется для локализации, поддержки ориентации дисплея, поддержки разных форматов дисплеев, клавиатуры
  35. 35. ресурсы• drawable-mcc257-mnc02• values-ru• values-ru-ldpi-qwerty-v7• layout-port• menu-car-notnight
  36. 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. 37. логи• Log.v(String, String) verbose debug info warn error• Toast Toast.makeText(getApplicationContext(), R.string.msg, Toast.LENGTH_LONG).show();
  38. 38. emulator• можно собрать устройство с любой конфигурацией• медленный• отсутствуют настройки и описание горячих клавиш• Ctrl + F12 переключиться в landscape режим
  39. 39. emulator• устройства с hdpi дисплеем могут не помещаться на экран• масштаб эмулятора задается через AVD Manager
  40. 40. emulator• устройства с hdpi дисплеем могут не помещаться на экран• масштаб эмулятора задается через AVD Manager
  41. 41. emulator• устройства с hdpi дисплеем могут не помещаться на экран• масштаб эмулятора задается через AVD Manager
  42. 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

×