ホーム画面に独自のアナログ時計ウィジェットを開発しようとしています。これはストック ICS アナログ時計ウィジェットに基づいていますが、ホーム画面に追加すると、私のウィジェットは最初に構成画面を開きます。
この画面では、(カラーピッカー ダイアログを使用して) 時計の色を選択できます。この画面には、選択した色の時計のプレビューも表示されます。(写真参照)。私の問題は、ホーム画面のウィジェットの色を選択した色に変更することです(適用ボタンを押したとき)。文字盤、時針、分針に使用する 3 つの .png ファイルがあります。widgetconfig クラスで次のコードを使用して色を付けます。
Drawable dial = getResources().getDrawable(R.drawable.clockbackground);
dial.setColorFilter(color, PorterDuff.Mode.MULTIPLY);
//hour
Drawable hour = getResources().getDrawable(R.drawable.hourhand);
hour.setColorFilter(color, PorterDuff.Mode.MULTIPLY);
//minute
Drawable min = getResources().getDrawable(R.drawable.minutehand);
min.setColorFilter(color, PorterDuff.Mode.MULTIPLY);
// clock
AnalogClock clockpreview = (AnalogClock) findViewById(R.id.ACconfig);
clockpreview.setBackgroundDrawable(dial);
これは、setContentView() を介して OnCreate() で設定した構成画面のレイアウト xml ファイルにあるため、AnalogClock を見つけることができるため、正常に機能します。問題は、画面上の時計ウィジェットに RemoteViews を使用する必要があることです。ということで、時計ウィジェットの新しい背景をRemoteViewsで設定してみました。しかし、RemoteViews はこれを行うにはあまりにも制限されているようです。setTextViewText() のようなものが必要ですが、アナログ時計ウィジェットの背景には、次のようになります。
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.clockwidget);
views.setAnalogClockBackgroundDrawable(dial);
時計ウィジェットの背景は変更できないようです。widgetconfigクラスのホームスクリーンで時計ウィジェットの色を変更するにはどうすればよいですか? 最初は簡単そうに見えるので、何か方法があるに違いない...
私のプロジェクトは、widget config クラスと clockwidget クラス、widgetconfig.xml、clockwidget.xml、および widget_info.xml (appwidgetprovider 用) で構成されています。