Cómo agregar widgets múltiples en una aplicación?

Acabo de terminar mi widget de Android. Ahora necesito tener diversos tamaños de este wiget para que el usuario elija de. Por ejemplo, necesito un widget de tamaño medio, pequeño y grande. Así que cuando el usuario instale la aplicación y mantenga presionada la pantalla de inicio a continuación, elija widget, en el menú de widgets quiero que vea tres widget con el mismo nombre de la aplicación, pero con el tamaño. algo como esto:

HelloSmall helloMedium helloLarge

Tengo el medio uno listo, pero ¿cómo puedo hacer el pequeño y el grande en la misma aplicación? Sabiendo que los tres tamaños contienen los mismos datos exactos y las acciones sólo el tamaño y el fondo son diferentes.

Gracias.

Necesita una definición de receptor para cada tipo en su archivo de manifiesto como:

<receiver android:name=".MyWidget" android:label="@string/medium_widget_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/medium_widget_provider" /> </receiver> <receiver android:name=".MyWidget" android:label="@string/large_widget_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/large_widget_provider" /> </receiver> 

Esto le permitiría tener la misma clase AppWidgetProvider para varios widgets, con diferentes nombres de widget y diferentes tamaños definidos en el <appwidget-provider> XML.

Ahora, si necesita más diferencias en sus widgets que en el <appwidget-provider> XML, crearía una clase de widget base que implementa todo el comportamiento común entre los diferentes tipos:

 public abstract class MyBaseWidget extends AppWidgetProvider 

Y entonces cada una de sus implementaciones concretas podría extender MyBaseWidget. Entonces en su archivo de manifiesto tendría una definición de receptor para cada una de sus implementaciones concretas como:

  <receiver android:name=".MyMediumWidget" android:label="@string/medium_widget_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/medium_widget_provider" /> </receiver> <receiver android:name=".MyLargeWidget" android:label="@string/large_widget_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/large_widget_provider" /> </receiver> 

En realidad, android: el nombre de cada widget tiene que ser diferente. Si lo hace como en el ejemplo, solo un widget estará visible en la lista de widgets.

Chicos, tuve el mismo problema.

Debe añadir un segundo proveedor de widgets además;

 <receiver android:name=**".MyWidget**" android:label="@string/medium_widget_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/medium_widget_provider" /> </receiver> <receiver android:name=**".MyWidget2"** android:label="@string/large_widget_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/large_widget_provider" /> </receiver> 

Disfrutar

Ok así que básicamente necesitará:

Archivo de diseño delante de cada widget. Ej: main_small.xml, main_medium.xml …

En el directorio xml, agregue un proveedor para cada widget. Ex: small_provider.xml, medium_provider.xml … y así sucesivamente (tenga en cuenta que si no tiene un directorio xml, agréguelo bajo el directorio dibujable).

¡ahora que!

  • Definir un receptor en el manifiesto para cada widget. (Al igual que el ejemplo en la respuesta principal)

  • Puede utilizar el mismo diseño o disposición deferente. Básicamente esto depende de usted.

  • En su proveedor debe tener algo como esto:

 <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="146dip" android:minHeight="138dip" android:updatePeriodMillis="10000" android:initialLayout="@layout/main" /> 

Asegúrese de que cada proveedor especifique el archivo de diseño de destino que desea utilizar. En este código estoy pidiendo el archivo main.xml en el directorio de diseño. Para mi widget mediano por ejemplo voy a tener otro proveedor con el mismo código exacto, pero voy a cambiar la última línea

 > android:initialLayout="@layout/medium". 

Espero que esto ayude si no me deja saber y puedo cargar un ejemplo de trabajo en mi sitio web y se puede tomar un vistazo más de cerca. Por favor, hágamelo saber cómo va.

la mejor de las suertes.

Alguna información adicional a las otras respuestas …

  • Si está duplicando los archivos mencionados y si su widget utiliza un Service para proporcionar alguna funcionalidad, puede que tenga que duplicar su servicio.

  • Si duplica su Service , recuerde actualizar su manifiesto con el nuevo servicio , de lo contrario el nuevo servicio no se ejecutará …

Esto desperdició algún tiempo para mí.


Si usa cualquier BroadcastReceiver para enviar Intent a su Service duplicado … no olvide actualizar ese código también:

  • Ahora debe enviar intenciones a cada uno de los servicios.
  • SetImageViewBitmap no funciona en el widget android
  • ¿Cómo resolver el tamaño de pantalla de Android para diferentes dispositivos móviles?
  • Restaurar Administrador de alarmas después de reiniciar el teléfono
  • El widget de Android no puede recibir el mensaje DATE_CHANGED
  • Cómo configurar RecyclerView en el widget android
  • Cómo acceder a una base de datos SQL desde una aplicación de widget
  • Obtener el identificador de diseño de cadena, no funcionará
  • ¿El widget Android deja de funcionar después de un tiempo?
  • mensaje del widget android para desbloquear
  • Adición de TextViews al widget de pantalla de inicio mediante programación
  • Configuración de Android Widget con SharedPreferences
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.