Android 勉強会 #1 Support Package の使いかた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

アジェンダ

  1. Support Package とは?
  2. Support Package を導入する
  3. Support Package を使う
  4. まとめ

1. Support Package とは?

  • Android 4.0 (ICS) 以降で導入された機能をそれ以前のバージョンでも動作するように実装できるサポートライブラリ
  • SDK バージョン (APIレベル) 間の実装の違いを解消することができる!

2. Support Package を導入する

プロジェクトを新規作成すると自動追加される

lib フォルダの中に jar ファイルが自動的に追加されるので、これから作成するプロジェクトは意識する必要なく使うことができます!

既存プロジェクトに追加したい場合

「Android Tools」から「Add Support Library...」を選択して追加

add_support_library

※ 最新版へのアップデートもこれで OK

Egit でリポジトリに push したい場合

  1. jar ファイルを一度消す
  2. Add Support Package で追加する

こうすることで jar ファイルがもう一度配置されます。

3. Support Package を使う

  1. Fragment
  2. AsyncTaskLoader
  3. NavUtils
  4. View
  5. LruCache

1. Fragment

catch catch

Fragment とは

  • Android 3.0 で導入された小型 Activity 的なもの
  • 画面要素を一部品としてコンポーネント化できる
  • マルチ画面対応しやすい

使い回しが可能

frag01

Fragment の使いかた

  1. まずは Fragment を作る (Activityを作る感じで)
  2. FragmentActivity を継承した Activity を作る
  3. FragmentManager を取得する
  4. FragmentTransaction で追加してコミットする

import するクラスに注意!

Support Package のやつ

import android.support.v4.app.Fragment;

Support Package じゃないやつ

import android.app.Fragment;

Support Package の Fragment を使わないとAndroid 1.6 から動きません!

2. AsyncTaskLoader

Android catch

AsyncTaskLoader を使うメリット

  • UI の処理を非同期で実装できないように構成されている
  • 管理もしやすい(同じ Loader を複数回呼ぶ場合など)
  • AsyncTask はもう古い!

AsyncTaskLoader の使いかた

  1. AsyncTaskLoader を作る (AsyncTaskを作る感じで)
  2. FragmentActivity を継承した Activity を作る
  3. LoaderCallbacks を実装する
  4. LoaderManager から呼び出す

CursorLoader というクラスもあります

  • ContentProvider に非同期でアクセスするためのクラス
  • DB アクセスは重くなりがちなので非同期で処理すべき!

3. NavUtils

catch

"Up"の画面遷移

  • Android 3.0 から導入された画面遷移
  • Activity に親子関係を定義(子は親に戻る)
  • (うまく作れば)画面遷移がシンプルになる

Activity の親子関係を定義する

<!-- MainActivity -->
<activity
    android:name="com.example.navutilssample.MainActivity"
    android:parentActivityName="com.example.navutilssample.ParentActivity" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.navutilssample.ParentActivity" >
    </meta-data>
</activity>

NavUtils で "Up" を実装

Intent upIntent = NavUtils.getParentActivityIntent(MainActivity.this);
NavUtils.navigateUpTo(MainActivity.this, upIntent);

ParentActivity がスタック上にあればそこまで戻り、ない場合は新しく作る

4. ViewPager

catch catch

ViewPager

  • フリックで View を切り替える UI コンポーネント
  • View または Fragment を使用可能
  • 画像ビューアーなどを簡単に作れる

ViewPager の使いかた

  1. View を作る
  2. PagerAdapter を作る
  3. ViewPager にセットする

ListView を作るような感じで実装できます!

5. LruCache

catch

LruCache は Bitmap のメモリキャッシュに重宝!

  • 超シンプルに実装できる
  • キャッシュ最大サイズを決めるだけであとは自動管理

LruCache のインスタンス化

int maxSize = 10 * 1024 * 1024;
mLruCache = new LruCache<String, Bitmap>(maxSize) {
    @Override
    protected int sizeOf(String key, Bitmap value) {
        return value.getRowBytes() * value.getHeight();
    }
};

LruCache の格納と取得

LruCache に格納する

mLruCache.put("key", bitmap);

LruCache から取得する

mLruCache.get("key");

4. まとめ

  • 最新の機能を実装しつつ前のバージョンでも動作するソースにできる
  • SDK のバージョンアップにつれてサポートも追加されているようなので、バージョンアップ毎に要チェック
  • これからもどんどん情報発信していきます!