Androidアプリの開発をしよう08 ウィジェット①

アクティビティを持たないプログラム

目次

  1. ウィジェットの仕組みを知る
  2. ウィジェットを作成する
  3. アプリの実行
  4. プログラムの解説
  5. さいごに

ウィジェットの仕組みを知る

Androidではホーム画面に小さなアプリを設置することができます。
このアプリをウィジェットといいます。
皆さんも既存のアプリ等で使用していることと思います。
この章ではウィジェットを作成し、利用していくことを学習していきたいと思います。

ウィジェットを作成する

以前はManifestの追加やウィジェット設定ファイルの作成等、やることが多岐にわたり敷居が高かったのですが、今では割と簡単にウィジェットを作る方法があります。
ウィジェットの作り方は、いつもの通りプロジェクトの作成をするのですが、最後が違います。

    プロジェクトの新規作成

    「Finish」を押さずに以下の画像を見てください。
    普段であればここで「Basic Activity」を選択するのですが、今回は「Add No Activity」を選択してください。
    そうすると普段通りにプロジェクトファイルの生成を行い始めます。
    起動が完了すると一つ普段とは違った状態がみられると思います。
    それは、いつも「Main Activity」が置かれているフォルダにjavaファイルがまったく存在しないということです。
    ですので、ここにウィジェットを設定するjavaファイルを設置します。

    App Widgetの設置

    普段「Main Activity」があるフォルダを右クリックすると様々な項目が出てきます。
    そこで「New」→「Widget」→「App Widget」と選択していき、クリックしてください。
    こんな感じです。
    クリックすると以下のような画面が出てきます。
    ここではウィジェットのサイズ等を聞いてきているだけなので、名前を「AppWidgetTester」に変更して「OK」をクリックします(名称変更はしなくても問題ありません)。

    これでウィジェットが完成しました。
    コードは上記の作業ですべて完了しました。
    ですが、このままではアプリの実行ができません。
    なぜかというと、IntelliJIDEA(AndroidStudio)はアクティビティがあるものとしてアプリを実行しようとするからです。
    つまり「このアプリにはActivityは必要ないんだよ」ということを教えなくてはなりません。
    設定は以下のように行います。

    Edit Configurationsの変更

    今の状態だと右上のの隣の「app」の文字に✖印がついていると思います。
    「app」に✖がついてる状態ではアプリの起動ができません。
    ですのでここの「Edit Configurations」をクリックして、設定を変更します。
    すると以下のような画面になりますので「Lunch Options」のlunchの項目を「Default Activity」から「Nothing」に変更してください。
    これですべての準備が完了です。
    を押して実行してみましょう。

アプリの実行

アプリを実行しても今までのように画面が出てくることはありません。
ホーム画面を長押しして時にウィジェット追加画面が出てきますのでここで先ほど作ったウィジェットを追加します。

アプリのデモです。

プログラムの解説

ウィジェットのアプリは自動生成されたものを実行しただけにすぎませんが、プログラムがどのように変化したか確認してみましょう

    AndroidManifest.xml

    Manifestは上記のようにコードが追加されています。
    receiverとしてAppWidgetTesterが登録されているのがわかります。

    AppWidgetTester.java

    AppWidgetTesterクラスにはこれだけのコードが自動生成されます。

    app_widget_tester.xml

    app_widget_tester.xmlはウィジェットの画面を構成する要素です。
    が今回表示させた内容になります。

つまり、ウィジェットはAppWidgetTesterクラスでウィジェットの動きを、app_widget_tester.xmlで画面の表示をしています。

さいごに

ウィジェットの基本的な形は自動で生成できるのでだいぶ楽だと思います。
次回以降はこれを元にウィジェットを学習していきたいと思います。

このサイトをフォローする!