Widgetを試してみた - 単純にテキストを表示させるだけ
実装したモノ
エミュレータ画像
「Hello Widget World!」というTextViewを、Widgetとして表示させただけ。
ソースコード
Widget実装の基本情報
- AppWidgetProviderInfo オブジェクト
- AppWidgetProvider クラスの実装
- ビューのレイアウト
やったこと
事前準備
New Project -> Empty Activity
でプロジェクトを作成。
AndroidManifest.xml
<application ...>
...
<receiver android:name="WidgetSampleWidgetProvider"
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget_sample_widget_info" />
</receiver>
</application>
receiverタグ
intent-filterタグ & actionタグ
- android:name
- 使用するintentを指定する
- 今回は使わなかったけれど、後々使う予定なので記述だけした
meta-dataタグ
WidgetSampleWidgetProvider.kt (「AppWidgetProvider クラスの実装」に該当)
今回は使わないので、とりあえず定義しただけ。
class WidgetSampleWidgetProvider : AppWidgetProvider() {
}
本来は、ここでウィジェットがイベント(ブロードキャスト)を受け取った際の動作を定義する。
widget_sample_widget_info.xml (「AppWidgetProviderInfo オブジェクト」に該当)
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="80dp"
android:minHeight="40dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/widget_sample_widget"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen">
</appwidget-provider>
appwidget=providerタグ
- android:minWidth
- 最小幅
- 初期表示時は、この幅になる
- android:minHeight
- 最小高さ
- 初期表示時は、この高さになる
- android:updatePeriodMillis
- android:initialLayout
- ビューのレイアウトの場所を指定する
- android:resizeMode
- どの方向に対してリサイズできるか?を指定する
- horizontalで水平方向、verticalで垂直方向
- android:widgetCategory
widget_sample_widget.xml (「ビューのレイアウト」に該当)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#FFFF00">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello Widget World!" />
</RelativeLayout>
ここは適当。
但し、使用可能な
- レイアウトクラス
- ウィジェットクラス
が限られているので、注意が必要。(詳しくは公式サイトを参照)
参考サイト