tipos - widget android studio tutorial
cómo agregar múltiples widgets en una aplicación? (5)
Alguna información extra para las otras respuestas ...
Si está duplicando los archivos mencionados, y si su widget utiliza un
Service
para proporcionar alguna funcionalidad, es posible 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ó algo de 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.
Acabo de terminar mi widget de Android. Ahora necesito tener diferentes tamaños de este wiget para que el usuario pueda elegir. por ejemplo, necesito un widget de tamaño mediano, pequeño y grande. así que cuando el usuario instale la aplicación y mantenga presionada la pantalla de inicio y luego elija widget, en el menú del widget quiero que vea tres widgets con el mismo nombre de aplicación pero con el tamaño. algo como esto:
helloSmall helloMedium helloLarge
Tengo el medio listo, pero ¿cómo puedo hacer lo pequeño y lo grande en la misma aplicación? sabiendo que los tres tamaños contienen los mismos datos exactos y acciones, solo el tamaño y el fondo son diferentes.
Gracias.
Chicos, tuve el mismo problema.
También debe agregar un segundo proveedor de widgets;
<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
En realidad, Android: el nombre de cada widget debe ser diferente. Si va a hacer esto como en el ejemplo, solo un widget será visible en la lista de widgets.
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 widgets y diferentes tamaños definidos en el <appwidget-provider>
XML.
Ahora, si necesita más diferencias en sus widgets que lo que está en el <appwidget-provider>
XML, crearía una clase de widgets base que implementa todo el comportamiento común entre los diferentes tipos:
public abstract class MyBaseWidget extends AppWidgetProvider
Y luego, cada una de sus implementaciones concretas podría extender MyBaseWidget. Luego, 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>
Ok, entonces básicamente necesitarás:
archivo de diseño para cada widget. ex: main_small.xml, main_medium.xml ...
en el directorio xml agrega un proveedor para cada widget. ej: small_provider.xml, medium_provider.xml ... y así sucesivamente (tenga en cuenta que si no tiene un directorio xml agréguelo en el directorio dibujable).
¡ahora que!
define un receptor en el manifiesto para cada widget. (al igual que el ejemplo en la respuesta principal)
puede usar el mismo diseño o diseño deferente. básicamente, esto depende de ti.
en tu proveedor deberías 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 usar. en este código, estoy pidiendo el archivo main.xml en el directorio de diseño. para mi widget medio, por ejemplo, tendré otro proveedor con el mismo código pero cambiaré la última línea
> android:initialLayout="@layout/medium".
Espero que esto ayude si no me dejas saber y puedo subir un ejemplo de trabajo en mi sitio web y puedes echarle un vistazo más de cerca. Por favor déjame saber cómo va.
la mejor de las suertes.