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

Post on 29-Nov-2014

2.429 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

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

Paul Malikovhttp://about.me/vokilam

содержание

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

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

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

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

Act

ivity

запуск 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");}

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

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.

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 imagesStretchable area

Padding box (optional)

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

9-patch imageswithout padding box

9-patch imageswithout padding box

9-patch imageswithout padding box

android:padding="0dp"

9-patch imageswithout padding box

android:padding="0dp"

9-patch images

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

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

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

9-patch images

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

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

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

android:padding="0dp"

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

• ToastToast.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

top related