Androidで超シンプルなWidgetを作りたい
情報が少なくてちょっとつまづいたのでメモ。
Contents
目標
まずはホームスクリーン上に簡素なViewを表示する。
いきなりあれこれやろうとしても理解できないので。。
必要なもの
下記の4つが必要になる。
- Widgetの見た目を定義するレイアウトファイル
- Widgetのメタ情報を定義するAppWidgetProviderInfoオブジェクト
- Widgetの状態をハンドリングするためのAppWidgetProviderオブジェクト
- マニフェストファイルにAppWidgetProviderを追加する
次に、必要なファイルやオブジェクトの詳細を書いてゆく。
Widgetの見た目を定義するレイアウトファイル
https://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
ドキュメントに書かれてる通り、res/layout以下にxmlファイルを配置すればOK。
たとえばこんな感じ。
TextViewにアプリ名を表示するだけのもの。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:background="@color/blue_800" android:text="@string/app_name"/> </LinearLayout> |
Widgetでは使用できるViewに限りがあるので注意する。
とはいえ、ListViewをはじめとした多くのViewが使える。
なので困ることはないと思う。
詳細はドキュメントで。
Widgetのメタ情報を定義するAppWidgetProviderInfoオブジェクト
オブジェクト、と書いているがjavaファイルを作る必要はない。
XMLファイルに必要な情報を書いてゆく。
こんな感じ。
1 2 3 4 5 6 7 8 9 10 |
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget_main" android:minHeight="40dp" android:minWidth="40dp" android:resizeMode="horizontal|vertical" android:updatePeriodMillis="86400000" android:widgetCategory="home_screen"> </appwidget-provider> |
プロパティに関する詳細は下記を参照する。
https://developer.android.com/guide/topics/appwidgets/index.html#MetaData
Widgetの状態をハンドリングするためのAppWidgetProviderオブジェクト
Viewを表示するだけなら具体的な処理の記述は必要ない。
が、一応下記のようなjavaファイルを用意しておく。
1 2 3 4 5 6 |
public class ExampleAppWidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); } } |
マニフェストファイルにAppWidgetProviderを追加する
先ほど作ったExampleAppWidgetProviderクラスについての宣言を追加しておく。
1 2 3 4 5 6 7 8 |
<receiver android:name=".ExampleAppWidgetProvider"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/provider_info"/> </receiver> |
作ったWidgetを表示する
上記の4つの手続きが完了したらアプリを起動する。
これだけではWidgetは表示されない。
Widgetを追加するためにはホームスクリーンを長押し→Widget一覧から作ったWidgetを長押し→ホームスクリーン上に配置、という流れ。
作ったWidgetはこんな感じになった。
青いやつね。
これで何もしない超シンプルなWidgetが完成。