Your SlideShare is downloading. ×
0
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

2,114

Published on

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

No Downloads
Views
Total Views
2,114
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
54
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Paul Malikov http://about.me/vokilam Первый опыт: Android SDK
  • 2. содержание• жизненный цикл Activity• странности особенности процесса разработки• полезная литература
  • 3. • жизненный цикл Activity
  • 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. 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 areaPadding 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 boxandroid:padding="0dp"
  • 26. 9-patch images without padding boxandroid: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

×