[jam 1.0] android os, java (paul malikov)

42
Первый опыт: Android SDK Paul Malikov http://about.me/vokilam

Upload: evgeny-kaziak

Post on 29-Nov-2014

2.430 views

Category:

Technology


3 download

DESCRIPTION

 

TRANSCRIPT

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

Первый опыт: Android SDK

Paul Malikovhttp://about.me/vokilam

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

содержание

• жизненный цикл Activity

• странности особенности процесса разработки

• полезная литература

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

•жизненный цикл

Act

ivity

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

запуск 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 WebActivityBundle b = getIntent().getExtras();String url;

if (b != null) { url = b.getString("url"); mCRMID = b.getString("crmid");}

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

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">

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

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">

Application does not have the attribute 'debuggable' set to TRUE in its manifest and cannot be debugged.

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

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">

Application does not have the attribute 'debuggable' set to TRUE in its manifest and cannot be debugged.

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

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>

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

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>

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

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>

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

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>

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

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>

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

android manifest

• не забывайте добавлять тег <activity /> при создании нового класса Activity

• не забывайте указывать разрешения <uses-permission /> для вашего приложения

• будьте внимательны

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

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>

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

layouts

• FrameLayout

• LinearLayout

• RelativeLayout

• TableLayout

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

layouts

• не забывайте определять атрибуты layout_width, layout_height или использовать стили

• не используйте AbsoluteLayout

• используйте dp (density pixels) и sp (scalable pixels) вместо px

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

9-patch imagesStretchable area

Padding box (optional)

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

9-patch imageswith padding box

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

<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 imageswith padding box

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

<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 imageswith padding box

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

<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 imageswith padding box

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

<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 imageswith padding box

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

9-patch imageswithout padding box

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

9-patch imageswithout padding box

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

9-patch imageswithout padding box

android:padding="0dp"

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

9-patch imageswithout padding box

android:padding="0dp"

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

9-patch images

• информация 9-patch располагается на однопиксельной белой (#FFFF) или прозрачной (#FFF0) рамке в виде рядов черных (#000F) пикселей

• при масштабировании такого изображения редактор может сглаживать границы - появление серых пикселей

• ./tools/draw9patch неудобный

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

9-patch images

• информация 9-patch располагается на однопиксельной белой (#FFFF) или прозрачной (#FFF0) рамке в виде рядов черных (#000F) пикселей

• при масштабировании такого изображения редактор может сглаживать границы - появление серых пикселей

• ./tools/draw9patch неудобный

android:padding="0dp"

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

google maps• для нормальной работы необходим Maps API key

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

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

• указать ключ при создании карты

mMapView = new MapView(this, "example_Maps_ApiKey_String");

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

слои google maps

• OverlayItem (точка)

• ItemizedOverlay (массив точек)

• Ваш собственный (extends Overlay)

• Координаты задаются в формате

(int) degree * 1e6

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

soft keyboard

• программный вызов работает в одном Activity и не работает в другом (?)

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(mSearchField, InputMethodManager.SHOW_IMPLICIT);

• как узнать, что пользователь свернул клавиатуру?

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

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();

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

dialogs & menus• диалоги и меню кэшируются системой. чтобы внести изменения в существующие объекты, используются

onPrepareDilaog() onPrepareOptionsMenu()

• видимость диалога управляется методами Activity

showDialog(int id) dismissDialog(int id) removeDialog(int id)

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

ресурсы

• мощный инструмент выбора ресурсов основывается на различных критериях

• используется для локализации, поддержки ориентации дисплея, поддержки разных форматов дисплеев, клавиатуры

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

ресурсы

• drawable-mcc257-mnc02

• values-ru

• values-ru-ldpi-qwerty-v7

• layout-port

• menu-car-notnight

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

ресурсы• критерии должны разделяться символом ‘-’ и следовать в порядке убывания приоритета (приоритеты описаны в DevGuide)

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

• обращайте внимание на именование файлов, в частности для изображений: res/drawable-mdpi/Untitled6.9.png: Invalid file name: must contain only [a-z0-9_.]

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

логи• Log.v(String, String) verbose debug info warn error

• ToastToast.makeText(getApplicationContext(), R.string.msg, Toast.LENGTH_LONG).show();

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

emulator

• можно собрать устройство с любой конфигурацией

• медленный• отсутствуют настройки и описание горячих клавиш

• Ctrl + F12 переключиться в landscape режим

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

emulator

• устройства с hdpi дисплеем могут не помещаться на экран

• масштаб эмулятора задается через AVD Manager

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

emulator

• устройства с hdpi дисплеем могут не помещаться на экран

• масштаб эмулятора задается через AVD Manager

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

emulator

• устройства с hdpi дисплеем могут не помещаться на экран

• масштаб эмулятора задается через AVD Manager

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

литература• 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