2016-02-17 7 views
10

Die Layoutdatei für mein Widget auf der obersten Ebene beginnt mit:Einstellung AppWidget Hintergrund für ein Widget wirkt sich auch andere

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="@dimen/widget_margin" 
    android:id="@+id/widget" 
    android:background="#20000000" > 

So ist der Ausgangs Hintergrund ist halbtransparent. Dann irgendwann während der Ausführung, nenne ich die folgenden, um den Hintergrund vollständig transparent zu machen:

remoteViews.setInt(R.id.widget, "setBackgroundColor", Color.parseColor("#00000000")); 
appWidgetManager.updateAppWidget(appWidgetId, remoteViews); 

Während dies funktioniert, was ich bin Feststellung ist, dass, wenn ein anderes Widget hinzugefügt wird, ist der Hintergrund für das Widget aus beginnt, Volltransparent statt halbtransparent wie im Layout xml. Es ist, als ob die Einstellung der Hintergrundfarbe für ein Widget es für alle geändert hat, einschließlich neuer Widgets, die nachträglich hinzugefügt wurden.

Nun ist dies seltsam, weil zur gleichen Zeit wie das obige Snippet, habe ich auch eine Bitmap in das Widget hinzufügen (über die RemoteViews) mit:

remoteViews.setImageViewBitmap(R.id.imageView, bmp); 

... und dass Bitmap doesn Wenn Sie nicht in allen folgenden Widgets angezeigt werden, scheint die grundlegende Methode, die ich verwende, korrekt zu sein.

Warum verbreitet sich der Hintergrund also auf andere Widgets?

EDIT Ableitung von appWidgetId hinzufügen, wie in Kommentar angefordert:

Grundsätzlich ist die stammt aus einer Intent, z.B. in onCreate() der Konfiguration Activity für das Widget:

Intent intent = getIntent(); 
Bundle extras = intent.getExtras(); 
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
+0

können Sie uns zeigen, wie Sie dieses Widget erstellen und wie fügen Sie neue Elemente hinzu? – csenga

+1

Wo haben Sie 'remoteViews.setImageViewBitmap (R.id.imageView, bmp);'? –

Antwort

0

In Your AppWidgetProvider Klasse überschreiben Sie onUpdate Methode. Der letzte Parameter ist appWidgetIds, der ein Array von aktuellen aktiven Widgets-IDs ist. Höchstwahrscheinlich haben Sie implementiert, dass die Hintergrundfarbe dort durch das Array für jede widgetId geändert wird. Um einen benutzerdefinierten Hintergrund für jedes Widget definieren zu können, müssen Sie eine Logik implementieren, mit der ein erforderlicher Hintergrund auf die spezifische widgetId abgebildet und diese Logik in der Schleife berücksichtigt wird.

Verwandte Themen