Cómo cambiar el diseño del widget de fondo mediante programación

Tome esta disposición del widget por ejemplo (parte de mi disposición entera del widget)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/widget_background_dark_4x2" android:orientation="horizontal" android:id="@+id/widget_main" > 

Quiero ser capaz de cambiar el fondo dibujable utilizado basado en una selección de usuarios. Por ejemplo, usando vistas remotas, puedo actualizar el color de un texto haciendo algo como esto:

 remoteView.setTextColor(R.id.text_view1, Color.WHITE); 

Sin embargo he estado encontrando difícil al mismo para el fondo de mi disposición linear. Lo intenté:

 remoteView.setBitmap(R.id.widget_main, "setBackgroundDrawable", ((BitmapDrawable) context.getResources().getDrawable(R.drawable.widget_background_dark_4x2)).getBitmap()); 

Pero consigo el error siguiente:

 06-01 22:46:36.305: WARN/AppWidgetHostView(244): android.widget.RemoteViews$ActionException: view: android.widget.LinearLayout doesn't have method: setBackgroundDrawable(android.graphics.Bitmap) 

Cualquier ayuda con esto sería muy apreciada.

<< EDIT >> También he probado esto:

 Bitmap bitmap = ((BitmapDrawable)context.getResources().getDrawable(R.drawable.widget_background_light_4x2)).getBitmap(); remoteView.setBitmap(R.id.widget_main, "setBackgroundDrawable",bitmap ); 

Pero por desgracia recibe el siguiente error:

06-01 23:11:26.039: WARN/AppWidgetHostView(244): updateAppWidget couldn't find any view, using error view 06-01 23:11:26.039: WARN/AppWidgetHostView(244): android.widget.RemoteViews$ActionException: view: android.widget.LinearLayout doesn't have method: setBackgroundDrawable(android.graphics.Bitmap)

Has probado:

 remoteView.setInt(R.id.widget_main, "setBackgroundResource", R.drawable.widget_background_dark_4x2); 

Ok, bien, la única solución que podría terminar con venir para esto fue para cambiar la forma en que se muestra la imagen de fondo en el LinearLayout. Como se puede ver arriba, estaba usando la etiqueta de fondo de Android para mostrar la imagen. Lo que acabé haciendo fue que quité esto y luego envuelto todo mi diseño de widget (que estaba dentro de un linearlayout dentro de un relativelayout. Entonces sólo tenía un ImageView decalred primero dentro de la RelativeLayout y luego tenía el resto de los widgets linearlayout sentarse en la parte superior Luego, dentro de mi código, sólo establecí la fuente de vista de imagen a través de la vista remota y funcionó como un regalo.

No es la manera más elegante / eficiente de codificar, pero funcionó!

  • Cambiar gradualmente el fondo de gradiente del widget
  • SetImageViewBitmap no funciona en el widget android
  • Android widget ¿cómo puede obtener el tiempo en hora y minuto de esto?
  • ¿Por qué utilizar DialogFragment?
  • Android Widget deja de funcionar aleatoriamente
  • Recursos android de escala automática
  • Actividad de inicio de Android al presionar elemento ListView de widget
  • Cómo encontrar el continente en una ubicación determinada usando Geocoder en la aplicación android
  • ¿Cómo puedo hacer que un buscador Android se mueva sin problemas?
  • Picasso: cargar imágenes en widget listview
  • Restaurar Administrador de alarmas después de reiniciar el teléfono
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.