AppWidgetの背景画像を変更する
AndroidのAppWidget開発中のメモ。
AppWidgetの背景画像を変更しようとすると「ウィジェットを表示できません」と表示されてしまう。
エラー
こんな感じでAppWidgetのレイアウトを定義(途中省略)。
<LinearLayout android:id="@+id/appwidget_layout" android:background="@drawable/widgetbg"> <TextView android:id="@+id/appwidget_text" android:text="sample" /> </LinearLayout>
更新処理でLinearLayoutのbackgroundを更新する。
AppWidget上のウィジェットを更新するにはRemoteViewsを使う。
RemoteViews views = new RemoteViews(context, R.layout.widgetlayout); views.setInt(R.id.appwidget_layout, "setBackgroundResource", R.drawable.widgetbg_red);
こいつを実行してみたところ、AppWidgetの画面には「ウィジェットを表示できません」と表示されてしまう。
調べてみた
とりあえず、"AppWidget"、"RemoteViews"、"setBackgroundResource"といったキーワードで調べてみると、海外のメーリングリストがヒット。
Google グループ
Google グループ
どうも自分のケースと同じく、RemoteViewsを使ってsetBackgroundResourceを実行してもbackgroundが更新されないらしい。
結局解決策が見つからなかったので別の方法でチャレンジ。
FrameLayoutを使う
FrameLayoutを使い、背面にImageView、前面にLinearLayoutを配置する。
<FrameLayout> <ImageView android:id="@+id/appwidget_image" android:src="@drawable/widgetbg" /> <LinearLayout android:id="@+id/appwidget_layout" android:background="@drawable/widgetbg"> <TextView android:id="@+id/appwidget_text" android:text="sample" /> </LinearLayout> </FrameLayout>
更新処理ではImageViewのsrcを更新する。
RemoteViews views = new RemoteViews(context, R.layout.widgetlayout); views.setInt(R.id.appwidget_image, "setImageResource", R.drawable.widgetbg_red);
これだと問題なくAppWidgetの背景画像を更新できた。