万人のためのモバイル: Android アプリのライフサイクルにおけるアクティビティーとアイコン

Android モバイル・アプリに粋なナビゲーションを追加する

Activity クラスは、Android モバイル・アプリの中心的なクラスであるとともに、アプリとユーザーとの対話部分や、アプリとモバイル端末とのインターフェースを微調整できる場所でもあります。作成したアプリがそのライフサイクルにおいて望み通りの動作をするように微調整してから、アイコンとアクション・バーを使用して、ユーザーを UI ナビゲーションやアプリのさまざまな機能に誘導してください。

Andrew Glover, CTO, App47

Andrew GloverAndrew Glover は開発者であり、モバイル・テクノロジーにはまっています。現在 App47 の CTO を務める彼は、easyb BDD (Behavior-Driven Development) フレームワークの作成者でもあり、『継続的インテグレーション入門 開発プロセスを自動化する 47 の作法』、『Groovyイン・アクション』、『Java Testing Patterns』の 3 冊の本の共著者でもあります。彼の最新情報を追うには、ブログを読むか、Twitter でフォローしてください。



2013年 6月 27日

はじめに

この連載について

モバイル・アプリの配布が急増するなか、モバイル開発のスキルを要する市場が急成長しています。この developerWorks の連載では、プログラミングの経験は積んでいても、モバイルの世界でのプログラミングには馴染みのない開発者を対象に、モバイルの世界でのプログラミングをわかりやすく紹介します。

まず Java コードでネイティブ・アプリを作成することから始め、JVM 言語、スクリプティング・フレームワーク、HTML5/CSS/JavaScript、サード・パーティー・ツールなどを使いこなせるようにモバイル開発のスキルを磨いていきます。ステップ・バイ・ステップで、ほとんどどのようなモバイル開発シナリオにも対応できるだけのスキルをマスターしてください。

最近のモバイル端末は、信じられないほど強力になっており、その性能は、多くの開発者が初めてプログラミングをしたときに使っていたデスクトップ・コンピューターを遥かに上回るほどです。そのため、モバイル端末は今でもなおリソースに制約がある環境であるということを忘れがちですが、モバイル・アプリを開発するときには、アプリを実行する環境に制約があることを忘れてはなりません。このことは、作成したアプリが他のアプリとシステム・リソースを奪い合うことになるという事実を考えると、なおさら言えることです。他のアプリのなかには、作成したアプリよりもユーザーの日々の活動に不可欠な存在となっているものもあります。

作成したアプリが確実に広く使用されるようにするための 1 つの方法は、システム・リソースを節約するアプリにすることです。Android では、システム・リソースを使用するためのメカニズムでもあり、システム・リソースを節約するためのメカニズムでもあるのが Activity クラスです。この (Java Servlet と非常によく似ていて) とてもよくできた中心的なクラスのライフサイクルを理解すればするほど、Android モバイル・アプリのリソース使用量とパフォーマンスを上手に微調整できるようになります。

今回は、Activity クラスのライフサイクルを簡単に説明した後、Android アプリのライフサイクルの各ステージを処理するメソッドを、デモ・アプリの中で使いながら学びます。これらのメソッドが連動する仕組みを理解すれば、システム・リソースを賢く使用できるようになります。続いて、デモ・アプリのナビゲーション・システムを切り替えて、ユーザーとの対話にメニュー・ボタンではなくアクション・アイコンを使用するように更新します。モバイル・アプリの UI ではアイコンがかなり標準的であり、新しい Android 端末 (バージョン 4.2.2 以降) ではオプション・メニューを非推奨とし、アクション・バーを優先するようになっています。したがって、アクション・バーの機能を Android モバイル・アプリに統合する方法を知っておくと役立つはずです。


Activity クラスのライフサイクル

Activity クラスのライフサイクルは、Android モバイル・アプリのライフサイクルにそっくりそのまま対応しています。ユーザーがアプリを操作したり、アプリをホストする端末を操作したりすると、Android プラットフォームは Activity インスタンスでコールバックを実行します。ユーザーがアプリを起動すると、初期 Activity が定義済みのライフサイクルを実行します。つまり、アプリがバックグラウンドで実行されるときには、フォアグラウンドのときに実行されていたライフサイクルのステージとは異なるステージを実行し、アプリがシャットダウンされるときには、さらにまた別のステージを実行します。図 1 に、Android の Activity のライフサイクルをユーザーとの対話の各ステージで示します。

図 1. Android の Activity のライフサイクル
Android モバイル・アプリの Activity のライフサイクルを示す図

Android モバイル・アプリのライフサイクルには以下の 4 つのステージがあります。

  • 起動
  • 一時停止と再開
  • 停止と再起動
  • 破棄

以降のセクションで、各ステージとそれぞれのコールバック・メソッド (Activity インスタンス内に実装できます) について学んでください。

Activity のライフサイクルの「起動」ステージ

デモ・アプリ

この連載の第 1 回第 2 回の記事で説明した内容に従った方は、独自のデモ・アプリを作成済みのはずです。デモ・アプリがない場合は、この先を読む前にデモ・アプリを作成しておくことをお勧めします。あるいは、私が作成した Overheard Word デモ・アプリの Git リポジトリーを複製することもできます (「参考文献」を参照)。

これまでの記事では、Activity の開始に対応するコールバック・メソッドとして onCreate を使用しましたが、読者の皆さんは、起動時に呼び出される他の 2 つのメソッド、onStartonResume についても理解しているかもしれません。今回は、これらのメソッドについて Activity のライフサイクルのコンテキストで検討します。

Eclipse の Android 開発環境では、「Override/Implement Methods... (メソッドのオーバーライド/実装…)」を選択することで、簡単にメソッドをオーバーライドすることができます (図 2 を参照)。

図 2. Activity のライフサイクルのコールバック・メソッドをオーバーライドする
Eclipse で Activity のライフサイクルのコールバック・メソッドをオーバーライドする操作を示すスクリーン・ショット

次に、onStart メソッドと onResume メソッドの両方を選択します。

図 3. コールバックを選択する
Eclipse でコールバック・メソッドを選択する操作を示すスクリーン・ショット

続いて Android の Log クラスを使用して、リスト 1 に示すようにトレース・ステートメントを組み込みます。

リスト 1. Android の Activity のコールバックの実装
@Override
protected void onResume() {
    super.onResume();
    Log.d("overheardword", "onResume Invoked");
}

@Override
protected void onStart() {
    super.onStart();
    Log.d("overheardword", "onStart Invoked");
}

結果を確認するには、アプリのインスタンスを起動して、LogCat からログを観察します (図 4 を参照)。

図 4. LogCat のデバッグ・ステートメント
LogCat のデバッグ・ステートメントを示すスクリーン・ショット

LogCat による Android のロギング

Android には、android.util.Log という独自のロギング・システムが付属しています。この重宝なクラスを使用すれば、さまざまなレベル (infowarndebug など) でログを記録することができます。記録されたログは、Android SDK に同梱されている logcat ツールを使って表示することができます。Eclipse では LogCat がタブとして表示されます。このタブを使用して、タグをフィルタリングしたり、さらにはアプリのインスタンスをフィルタリングしたりすることができます。さらに LogCat では、モバイル端末をデスクトップ PC またはノート PC の USB ポートに接続するだけで、これらの PC からモバイル端末のログにアクセスすることもできます。

ご想像のとおり、onCreate はアプリが初めてロードされるときに呼び出される一方、onStartonResume はアプリがバックグラウンドで実行されるときや、再起動されるときなどの別のステージでのコンテキストで活躍します。

Activity のライフサイクルの「一時停止と再開」ステージ

一般に、モバイル端末は多数のアプリをホストしているものです。これらのアプリはさまざまな形でユーザーの注意を引こうと争うため、作成したアプリは、他のアプリに端末の画面を譲ってリソースを使用させるタイミングを認識することが重要となります。ときには、ユーザーがアプリの使用中に電話に応答しなければならないことや、アプリで情報のリクエストやエラー・メッセージなどをポップアップ・ダイアログとして表示したりすることがあります。いずれのアクションにしても、一時的に現行の Activity を中断することになります。

Activity が一時的に中断されると、onPause メソッドが呼び出されます。一時停止された Activity がフォーカスを取り戻すと、onResume が呼び出されます。一時停止と再開とは、影響を受けるアクティビティーは一時的に中断されるものの、完全に非表示にはならないことを意味します。

例えばユーザーが電話に出るなどして、アプリが完全に非表示にされるときにも onPause が呼び出されますが、この場合、次に呼び出されるのは onStop です。アプリがフォアグラウンドに戻ると onRestart が呼び出され、その後に onStart の呼び出し、そして onResume の呼び出しが続きます。

onPauseonRestart、および onStop を実装した場合の動作を調べてみましょう。この連載で取り組んでいる Android アプリが手元にある場合は、コードにログ・ステートメントを追加してからアプリを起動してください。「Home (ホーム)」ボタンをタップしてインスタンスを完全に非表示にした後、アプリのアイコンをタップして再表示します。これらの操作により、一連のメソッドが呼び出されていることがわかります。まず、onPause が呼び出され、次に onStop が呼び出されます。アイコンをクリックしてアプリを再開すると、onRestartonStartonResume の順に呼び出されます。

Activity の破棄も、アプリの通常の実行プロセスで発生することです。例えば、Activity インスタンスを終了することを知らせるには、このインスタンスの finish メソッドを呼び出します。ここで重要な点は、Activity はシャットダウンされることから、非表示にされるときと同じライフサイクルに従いますが、最終的なコールバックは onDestroy であることです。

このプロセスを具体的に説明するために、リスト 2 では私が作成した Overheard Word アプリ (「万人のためのモバイル: スワイプしてみよう!Android でのジェスチャーのプログラミング」を参照するか、Github からソースを入手してください) を使用して、上方向のスワイプ動作時に finish メソッドを呼び出します。

リスト 2. Activity インスタンスの破棄
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
   try {
       final SwipeDetector detector = new SwipeDetector(e1, e2, velocityX, velocityY);
       if (detector.isDownSwipe()) {
        return false;
       }else if (detector.isUpSwipe()) {
        finish();
       }else if (detector.isLeftSwipe()) {
        Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show();
       }else if (detector.isRightSwipe()) {
        Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show();
       }
   } catch (Exception e) {
       // nothing
   }
   return false;
}

使用する可能性が最も高い Activity のライフサイクルのメソッドは、onCreateonRestartonDestroy です。私のアプリを例にすると、アプリのさまざまな UI ビューを最新の表示にするために onRestart を使用し、Android 端末のローカルで実行される SQLite などのデータベースとの接続を解放するために onDestroy を使用しました。

まだ明白ではないかもしれませんが、外部リソース (外部 Web サービスや、端末のファイルシステムまたはデータベース) を扱うようになると、これらのライフサイクルのステージが極めて重要になってきます。

次は、onCreateOptionsMenuonOptionsItemSelected という2 つの Activity フック・メソッドを使ってアプリのメニューの振る舞いを実装する場合について検討しましょう。この 2 つのメソッドを同期させた後、それらの機能をアイコンに結び付けて UI をさらに洗練したものにします。


メニューとアクションによるナビゲーション

Eclipse で Overheard Word プロジェクトを作成したときに最初に定義した Activity には、onCreateOptionsMenu というスタブ・メソッドがあります。お察しのとおり、このメソッドはオプション・メニューを作成するメソッドです。一昔前の Android 端末では、オプション・メニューは「Menu (メニュー)」ボタンで表されています。新しい端末では、縦に並んだ一連のドットとして表され、アプリ自体に表示されます。新しい Android 端末には、メニュー・ボタンは必要ありません。

古い端末を表すエミュレーター・インスタンスには、「Menu (メニュー)」というラベルが付いたボタンが表示されます。このボタンをクリックすると、アプリのインスタンスがオプションのメニューを表示します。この例では、ナビゲーションとしてのオプションを検討します。例えば、ユーザーがホーム・ボタンを押すと図 5 に示すような画面が表示されます。

図 5. メニュー項目が実装されていない状態
Android エミュレーターに表示されたメニュー項目が実装されていないアプリのスクリーン・ショット

タブレットには、メニュー・ボタンがありません。ユーザーはメニューから項目を選択する代わりに、各種のアクションを開始するよう求められます。図 6 に、アクション・バーとして知られる、この新しい UI を示します。

図 6. Android の新しいアクション・バー
Android エミュレーターに表示された Android の新しいアクション・バー

メニュー・ボタンとアクション・バーは同じように振る舞いますが、アクション・バーは新しい端末のみに実装されます。私たちがターゲットとしているのは古いバージョンの Android なので (全 Android 端末の約 50 パーセントが Gingerbread を実行していることを思い出してください!)、デモには、馴染みの深いメニュー・ボタンを使用します。皆さんが Android の新しいバージョンと、それに対応する端末をターゲットにする場合に備え、ナビゲーション・コードを更新してアクション・バーを実装する方法も追って説明します。

オプション・メニューを作成する

Overheard Word を改良してより効率的なユーザー・インターフェースにするための着実な最初のステップは、オプション・メニューを実装して、ユーザーがアプリを終了できるようにすることです。アプリの終了は、Activity のライフサイクルの 1 つのステージです。したがって、Activity メソッドを使用してこの機能を実装します。

Android アプリでは、1 つの XML ファイルに、すべての UI 関連の処理に対応する部分があることを思い出してください。つまり、レイアウトの XML を編集することが、UI を定義する方法となります。Android アプリの XML ファイルは、プロジェクトの res フォルダーに含まれる特定のディレクトリーにあります (例えば、レイアウト・ファイルは layout ディレクトリー内にあります)。

簡単な演習として、Overheard Word のメイン・アクティビティーに含まれる以下の onCreateOptionsMenu メソッドのデフォルト実装を見てください。このコードが意味していることがわかりますか?

public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.overheard_word, menu);
  return true;
 }

上記のコードが、menu という名前のリソース・ディレクトリー内で、overheard_word.xml という XML ファイルを探しているのだと判断した方は、Android のエキスパートへの道を順調に進んでいます!

終了を選択!

次に、メニューのリソース XML ファイルを編集して、Quit というメニュー項目を追加します。最初に、res/values ディレクトリーで strings.xml ファイルを見つけます。このファイルが見つかったら、ファイルを開いて以下のような新しいエントリーを作成します。

<string name="quit_menu">Quit</string>

上記のマークアップは、Quit という単語を定義し、この単語を quit_menu という ID で参照できるようにしています (ちなみに、この ID によって、アプリの国際化対応がかなり容易になります)。次に、menu ディレクトリー内の overheard_word.xml ファイルを開きます。このファイル内でタイトルを @string/quit_menu に変更することによって、Quit という単語をメニュー項目に関連付けます。

ここで、エミュレーターを起動して、「Menu (メニュー)」ボタンを押してください。画面の下部に Quit という 1 つの項目が含まれたメニューが表示されます。ただし、まだ実装は済んでいないため、この項目を選択しても何も起こりません。

Quit の実装コードはこの後すぐに追加しますが、その前に、モバイル・アプリのあらゆる機能のもう 1 つの重要な要素について検討します。それは、ルック・アンド・フィールです。お気付きかと思いますが、最近のモバイル UI の多くでは (また、ますます多くの Web アプリケーションの UI で)、ナビゲーションにアイコンを使用するようになっています。一般的な単語のボタンを無料で入手できるアイコンに置き換えるとどうなるかを調べてみましょう。


モバイル UI 設計でのアイコン

私はモバイル開発の世界に足を踏み入れる前に、アイコンについてかじったことがありますが、エンタープライズ・アプリケーションでアイコンを使うことはめったにありませんでした。Web アプリケーションが次第にインタラクティブになるにつれ、アイコンを使用する機会は増えてきましたが、私にとってまさにアイコンが主役となったのは、モバイル開発を始めてからです。

私のアイコンの出所

最近では、オープンソースのアプリや商用のアプリのなかに、無料で使用できるアイコンが簡単に見つかります。また、わずかな料金で使用権を購入できるアイコンもあります。私が個人的に気に入っているのは、Glyphish というパッケージです (「参考文献」を参照)。このパッケージには何百ものアイコンが含まれていて、ライセンス料金は極めてリーズナブルです。Glyphish は、出所を明示して無料で使用することもできます。このパッケージをざっと調べて、このセクションのデモに使用したいと思うアイコンを探してみることをお勧めします。

Android のモバイル UI デザインにアイコンを使用する場合には、端末の解像度を十分に認識しておく必要があります。Android 端末のエコシステムは相当広いため、作成したアプリは、低解像度の小型画面が搭載された端末から 7 インチ画面の高解像度のタブレットに至る多種多様な端末で実行される可能性があります。ハンドヘルド型の端末では問題なく表示されるアイコンでも、タブレットでは表示が粗くなってしまう場合があります。

幸い、作成したアプリのアイコンの外観をさまざまな端末で制御することは可能です。Android モバイル・アプリの res ディレクトリーを覗いてみてください。そこには、drawable-xxxx-pdi (xxxx は任意の文字列) いう名前のディレクトリーがいくつか含まれています。これらのディレクトリーは、さまざまな端末の画面の解像度に対応します。適切なサイズに設定したアイコンやその他の画像ファイルをこれらのディレクトリーに配置することで、各種端末でアイコンが正常に表示されることになります。

例えば、超高解像度の端末の場合、Android は drawable-xxhdpi ディレクトリー内のアイコンを探します。このディレクトリー内にあるランチャー・アイコンは、96 x 96 ピクセルで、解像度は 320 dpi 以上です。一方、drawable-ldpi ディレクトリー内にあるランチャー・アイコンは、36 x 26 ピクセルで、解像度は 120 dpi です。また、デフォルトの drawable ディレクトリーを作成し、Android が特定のアイコンの解像度に対応するファイルを見つけられないときには、そのディレクトリーを使用させることもできます。

事態を複雑にしないために、Overheard Word アプリには drawable ディレクトリーを作成することにします。このディレクトリーに、Quit に使用する 26 x 26 のアイコン・ファイル (.png ファイル) を格納します。

図 7. drawable ディレクトリーにアイコンを追加する
Eclipse での drawable ディレクトリーのスクリーン・ショット

次のステップは、このアイコンをオプション・メニューで参照することです。それには、overheard_word.xml ファイルで menu 項目を以下のように更新します。

android:icon="@drawable/quit_icon"

私と同じ手順に従っている場合は、同じ要素の id も更新する必要があります。以下のように記述的なストリング値を設定してください。

android:id="@+id/quit_item"

記述的で理解しやすいストリング値を設定しておくと、次のステップで onOptionsItemSelected メソッド内に終了の振る舞いを実装するときに役立ちます。選択イベント時には、quit_item の ID でメニュー項目を参照することができます。ここで一旦、エミュレーターを起動して、「Menu (メニュー)」ボタンを押してください。お気に召す表示になっていると思います。

図 8. 洗練されたアイコン!(Glyphish からの無料提供)
Android エミュレーターに表示された Overheard Word の新しい Quit アイコンを示すスクリーン・ショット

メニューの振る舞いを実装する

見た目に素晴らしい Quit メニュー項目のアイコンが表示されるようになりました (皆さんのアプリにも、これに相当するアイコンが追加されたことを願います)。けれども、まだ必要な作業は残っています。それは、そのボタンがタップされたときにアプリに対してアクションを指示するコードを追加することです。

オプション・メニューに振る舞いを実装するには、まず初めに onOptionsItemSelected メソッドをオーバーライドします。このメソッドをオーバーライドした後、コードを以下に示すように更新します (メニュー項目の ID については、ご自分のアプリに合わせて調整してください)。

リスト 3. メニュー項目を選択したときの処理
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.quit_item:
        this.finish();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

これは、単純な switch 文です。quit_itemid が選択されると、finish メソッドが呼び出されて、実質的にアプリがシャットダウンされます。

この新しいコードをエミュレーターで試してみてください。「Menu (メニュー)」ボタンにタッチして quit (X) オプションを押し、何が起こるのかを LogCat で観察します。Activity のライフサイクルの一通りのステージ、つまり onPauseonStoponDestroy が順に実行される様子を確認できるはずです。


Android 3.x のアクション・バー

前述したとおり、新しいバージョンの Android (Honeycomb 以降) ではオプション・メニューを避けて、アクション・バーを優先しています。新しい端末には「Menu (メニュー)」ボタンさえも不要になっているため、アクション・バーでアプリのナビゲーション (またはその他の機能) が機能する仕組みを理解しておくと有益です。

オプション・メニュー用にコーディングしたナビゲーション機能を、アクション・バーでも機能させるようにする上で必要な作業はそれほど多くありません。必要なメソッドはすべて実装済みなので、後は、XML リソースにいくつかの変更を加えるだけです。

最初に必要な作業は、メニュー・ボタンではなくアクション・バーを使用する端末を模倣するエミュレーター・インスタンスを作成することです。その最も簡単な方法としては、タブレットをエミュレートします。Android SDK インストール環境内から、Android SDK Manager のコマンドライン・アプリケーションを起動してください (これは、tools ディレクトリー内にある android コマンドです)。Android SDK Manager が稼働状態になったら、「Tools (ツール)」メニューから「Manage AVDs… (AVD の管理…)」を選択します。この操作によって表示されるダイアログで、新規エミュレーターまたは AVD (Android Virtual Device) を定義することができます。「7.0'' WSVGA (Tablet) (1024 x 600: mdpi)」を選択してから、エミュレーターのターゲットを「Android 4.2.2」以降のバージョンに設定します。これにより、エミュレーターはメニュー・ボタンに応答しなくなります (図 9 を参照)。

図 9. タブレットのエミュレーターを作成する
タブレット端末のエミュレーションを選択する画面のスクリーン・ショット

次に、そのタブレット・インスタンスで、作成したアプリを起動します。すると、縦に並んだ 3 つのドットが画面の右下隅に表示されます。なかなか素敵に見えると思いませんか?デフォルトでは、Android は新しいディスプレイでもメニューの振る舞いを維持します。アプリの XML リソースを更新することで、アクション・バーの外観と振る舞いをより自然なものにアップグレードすることができます。

まずは、アプリの AndroidManifest.xml ファイルで SDK のターゲットを更新します。

<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" />

次に、Eclipse でプロジェクトの「Properties (プロパティー)」を選択し、「Project Build Target (プロジェクトのビルド・ターゲット)」を Android 4.2.2 よりも新しいバージョンの Android に更新した後、「OK」をクリックしてプロジェクトを自動的に再ビルドさせます。その後は、menu ディレクトリー内にあるメニュー XML ファイルを見つけてください。このファイルを以下のように更新します。これで、Quit の item 定義が維持されます。

android:showAsAction="always"

プロジェクトの res ディレクトリーに values-v11 および values-v14 という名前のサブディレクトリーがない場合は、この 2 つのディレクトリーを作成します。そのうちの values-v11 ディレクトリーに、以下の XML ファイルを追加します。

<resources>
 <style name="AppBaseTheme" parent="android:Theme.Holo.Light"></style>
</resources>

values-v14 ディレクトリーには、以下のファイルを追加します。

<resources>
 <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"></style>
</resources>

以上の作業が終わったら、エミュレーターを再起動してください。右上隅に新しいアイコンが表示されるはずです。

図 10. アイコンが表示されたアクション・バー
緑色のロボットの新規アイコンのスクリーン・ショット

menu ディレクトリー内の quit 項目が定義されているメニュー・ファイルに戻り、showAsActionnever に変更します。アプリを再び実行して、同じ 3 つの縦に並んだドットが右上隅に表示されることを確認してください。

再設定をお忘れなく

アプリのターゲットを Gingerbread のままにしておきたい場合は、プロジェクトのビルド・ターゲットを再設定するとともに、このセクションで行った XML の変更を元に戻す必要があります。これらの変更には後方互換性がないからです!


アイコンでさらに趣向を凝らす

ここまでのところで、Gingerbread をターゲットにしたアプリにメニュー項目を追加し、アクション・バーを実装する新しい端末に応じてメニュー項目を見事に変換できることを明らかにしました。また、アプリの XML にいくつかの更新を加えるだけで、必要に応じて機能を更新する方法についても説明しました。

ここで、アイコンに関して学んだ内容の基礎固めをしましょう。アプリのナビゲーション・メニューにアイコンを追加するという力仕事はすでに経験したので、メイン・アイコンを更新するのはたいしたことではないはずです。メイン・アイコンはユーザーにとってアプリのシンボルであるため、これを更新してカスタマイズする方法を知っておくことは重要です。

これから Overheard Word のアイコンを更新します。皆さんは独自のアプリでこの手順に従うことができます。この場合も、インターネットを検索することで、すぐにたくさんのアイコン・サイトが見つかります。私はそのなかから興味深いアイコンのセットを見つけました。そのなかに、私がとても気に入った特別なアイコンがあります。

図 11. 新しいおしゃれなアイコン
ノート、ペン、リッド付きコーヒー・カップが描かれた Overheard Word の新しいメイン・アイコン

端末のプロファイルによって、アイコンをレンダリングしたときの結果は異なってくることを思い出してください。ユーザーには Overheard Word に対して良い第一印象を与えたいので、アイコンの解像度をターゲット端末の解像度の範囲に合わせるのは当然のことです。幸い私は、そのために実に役立つサイトを知っています。

アイコンの調査

デモには無料のアイコンを使用するので十分ですが、プロのアプリ向けのカスタム・アイコンを調査することには大きな価値があります。アイコン (またはアイコン・セット) はアプリのブランドを具体的に表現するため、他にはないようなアイコンにしたいものです。一般的なアイコンだったり、アマチュアの仕事であることが明らかなアイコンだったりした場合、ユーザーはそのアプリについてどのような判断を下すと思いますか?

Android Asset Studio (「参考文献」を参照) は、Google Code のプロジェクトの 1 つで、このプロジェクトには Android 開発者に役立つ多数のユーティリティーが揃っています。そのうち、私がよく使用しているユーティリティーは Launcher Icons です。Launcher Icons リンクをクリックしてアイコンをアップロードするだけで、このユーティリティーが各種端末のプロファイルに適したサイズのアイコン・ファイルを生成してくれます。後は、生成されたファイルを zip ファイルでダウンロードするだけの話です。私がアップロードしたアイコンに対しては、ダウンロードした zip ファイルに 4 つのディレクトリーが格納されています。このそれぞれのディレクトリーに、特定の解像度とサイズのファイルが含まれています。

図 12 Launcher Icons によって生成された、Android 端末に適したサイズのアイコン画像ファイルの一覧
Launcher Icons によって提供された、4 種類の Android 端末に適したサイズのアイコン画像ファイルの一覧

次に、各ディレクトリー内にある ic_launcher.png というファイルを、アプリの res フォルダー内にあるまったく同じ名前のサブディレクトリーにコピーします。注意する点として、このプロセスでは、Eclipse によって生成された元のアイコン・ファイルが置き換えられることになります。

最後に、アプリを再び実行し、エミュレーター・インスタンスにアプリが表示されるまで待ちます。ホーム・ボタンを押して結果を確かめると、おしゃれなアプリのアイコンが、(私にとっては) どのユーザーの端末でも OverHeard Word が最も興味深いアプリであることを示しています。

図 13. 象徴的なアイコンになりました!
端末のアプリ・メニューでかなり引き付けられる Overheard Word の新しいメイン・アイコン

まとめ

今回の記事では、Activity のライフサイクルについて概説し、アプリが効率的に端末のリソースを使用するようにこのライフサイクルでの処理を行う方法を説明しました。さらに、メニューとアクション・バーを使用してナビゲーションの構成体を定義し、実装する方法、そして単語のボタンをアイコンに置き換える方法も説明しました。

この記事で学んだことはすべて、Android アプリを作成する上で最も重要な内容です。Android でのモバイル開発は習得しやすく、そしてもちろん非常に楽しいものですが、馴染みのある Java 開発とは異なるパラダイムであることも理解してください。何十万というアプリが Google Play やその他のアプリケーション・ストアに用意されているなか、トップに上り詰めるアプリには、十分な計画と慎重な設計、そして熟練したコードが伴うのが一般的です。まだまだ学ぶことはたくさんあります!

参考文献

学ぶために

製品や技術を入手するために

  • Overheard Word Github リポジトリーに、この記事で使用したソース・コードがあります。
  • Android のスワイプ検出を容易にする Gesticulate についても調べてください。
  • この記事で使用した Android Launcher アイコン・ジェネレーターを試してみてください。
  • モバイル・アプリ用のアイコン: モバイル・アプリおよび Web アプリケーション用のライセンス付きカスタム・アイコンを選択するには、ArtDesigner および Glyphish にアクセスしてください。または、オンライン Icon Finder を使って何千もの無料のアイコンをブラウズすることができます。
  • Android のダウンロード: Android SDK は、Android 向けアプリの作成、テスト、デバッグに必要な API ライブラリーと開発ツールを提供します。
  • IBM developer kits のダウンロード: システムを更新して、最新のツールとテクノロジーを入手してください。

議論するために

  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、Wiki を調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Mobile development, Java technology, Open source
ArticleID=935340
ArticleTitle=万人のためのモバイル: Android アプリのライフサイクルにおけるアクティビティーとアイコン
publish-date=06272013