Android: AppWidget con la vista personalizada no funciona

Estoy creando un appwidget que consiste en una sola vista personalizada llamada Foo.

xml / widget.xml:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="0" android:initialLayout="@layout/widget_layout"> </appwidget-provider> 

layout / widget_layout

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <package.name.Foo android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> 

Foo:

  public class Foo extends View {..} 

He probado la vista de Foo en una aplicación normal de Android, y funciona perfectamente. Sin embargo, cuando intento ejecutar el widget me sale "error while loading widget" . Cuando quito la vista de Foo del widget, todo está bien. Así que tiene algo que ver con la vista Foo .

Lamentablemente no puedo obtener más errores específicos en DDMS, porque no sé de una manera de depurar widgets.

Me gustaría saber si es posible usar sus propias vistas personalizadas en un widget de aplicación. ¿Estoy haciendo algo mal aquí?

Casi dejé mi vista personalizada intacta, e implementé un ImageView para mi widget, luego procesé la vista usando el método getDrawingCache ()

 MyView myView = new MyView(context); myView.measure(150,150); myView.layout(0,0,150,150); myView.setDrawingCacheEnabled(true); Bitmap bitmap=myView.getDrawingCache(); remoteViews.setImageViewBitmap(R.id.dial, bitmap); 

Otra forma de hacerlo sin utilizar getDrawingCache() :

 MyView myView = new MyView(this); myView.measure(500, 500); myView.layout(0, 0, 500, 500); Bitmap bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888); myView.draw(new Canvas(bitmap)); remoteViews.setImageViewBitmap(R.id.imageView, bitmap); 

Utilicé caché para no volver a dibujar toda la vista así que no podría utilizar el código arriba. Y lo encuentro más elegante. Espero que pueda ser útil para alguien.

consulte la documentación .

AnalogClock, Button, Cronómetro, ImageButton, ImageView, ProgressBar y TextView son las vistas compatibles. Para diseños, debe utilizar FrameLayout, LinearLayout o RelativeLayout.

No se puede tener ninguna vista personalizada utilizada en el widget. De hecho, ni siquiera las vistas predeterminadas de Android están soportadas.

Para obtener una lista detallada de widgets / diseños compatibles, lea la documentación . Cualquier otra cosa que no sea la documentada no se puede colocar en widgets.

  • SetTextViewText no actualizar widget
  • ImageView dentro de RelativeLayout tiene relleno superior e inferior
  • Cambiar el color de texto de ListView
  • Widget de la galería androide desplazamiento infinito
  • Efecto de ondulación de Android 5+ remoteviews
  • Cambiar el estilo de ListPreference
  • Animaciones de widget de pantalla de inicio de Android
  • Android: ¿Cómo hacer la animación flip para la actividad de Android, al igual que el iphone flip horizontal de izquierda a derecha?
  • Detener Android desde el diseño de todas mis vistas
  • Animar la imagen .png en el widget
  • ¿Por qué NullPointerException cuando agrego programaticamente mi vista de texto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.