Het ontwikkelen van widgets voor het Android-platform omvat een iets andere reeks taken dan standaard app-ontwikkeling. In deze reeks zelfstudies werken we aan het ontwikkelen van een aanpasbare analoge klokwidget. De klok is gebaseerd op de Android AnalogClock-klasse en aangepast met uw eigen grafische afbeeldingen.
Nadat de klok is toegevoegd aan het startscherm van de gebruiker, wordt deze continu bijgewerkt om de huidige tijd weer te geven. We zullen de eigenschappen van de widget in XML definiëren, met een Java-klasse die AppWidgetProvider uitbreidt om updates te beheren. We zullen de gebruiker ook toestaan om het uiterlijk van de widget te configureren door erop te klikken, met een Activity-klasse die de gebruikersinteractie afhandelt. Zoals je misschien hebt gemerkt, hebben de Google Play-vermeldingen voor widgets vaak slechte beoordelingen en opmerkingen van gebruikers die zich niet realiseren dat een widget niet op dezelfde manier wordt gestart als een normale app. Om deze reden, en om tegemoet te komen aan sommige problemen met apparaten met Android 4.0 (Ice Cream Sandwich), zullen we ook een informatieve launcher-activiteit voor de widget-app toevoegen. We zullen ook de lay-out en verschillende andere toepassingsbronnen in XML specificeren.
Deze zelfstudiereeks over het bouwen van een aanpasbare Android Analoge klok Widget bestaat uit vier delen:
Hier is een momentopname van hoe het eindresultaat eruit zal zien met de standaardweergave (dus vóór aanpassing door de gebruiker):
In dit eerste deel van de serie zullen we ons widgetproject instellen, de nodige elementen toevoegen aan het manifestbestand en het XML-bronbestand maken dat de basiseigenschappen van de widget definieert. Deze eerste zelfstudie omvat slechts een paar stappen, maar het is van essentieel belang dat u ze allemaal begrijpt om de essentiële aspecten van widget-ontwikkeling te leren.
Als u in het verleden alleen standaard Android-apps hebt gemaakt, is het maken van een widgetproject een beetje anders. Start uw project in Eclipse op de gebruikelijke manier, kies "Bestand", "Nieuw" en vervolgens "Project". Selecteer "Android-project" in de lijst en druk vervolgens op "Volgende". Voer in het venster "Nieuw Android-project" de naam in die u wilt gebruiken voor uw widgetproject en klik op "Volgende".
Selecteer een builddoel voor uw app en klik op 'Volgende'. We richten ons op Android 4.0, API-niveau 14.
Voer uw pakketnaam in het venster Toepassingsinformatie in. Wanneer u een widget-app ontwikkelt, hoeft u geen activiteit te maken, dus u kunt desgewenst het selectievakje 'Activiteit maken' uitschakelen. We gaan echter een activiteit opnemen om informatie te geven over het gebruik van de widget, dus laten we Eclipse de activiteit nu maken. U kunt hier de minimum SDK wijzigen of deze optioneel wijzigen in het manifestbestand.
Klik op "Finish" en Eclipse bouwt uw project.
Open uw manifestbestand Manifest - het moet worden opgeslagen als "AndroidManifest.xml" in de projectmap, zichtbaar in de Pakket Explorer. Dubbelklik om het te openen en selecteer vervolgens het tabblad "AndroidManifest.xml", zodat u de XML-code rechtstreeks kunt bewerken.
Als u de minimum SDK niet hebt gewijzigd toen u het project maakte, maar u dit nu wilt doen, kunt u het element "uses-sdk" wijzigen zoals in het volgende voorbeeld:
Naast het opgeven van de minimale SDK hier, geven we ook de doel-SDK aan. Door niveau 14 te targeten, kunnen we gebruik maken van de automatische marge tussen widgets die worden weergegeven op apparaten met Ice Cream Sandwich.
Op dit punt kunt u de hoofdactiviteitssectie van het manifest bewerken als u geen activiteit van het opstartprogramma wilt gebruiken. We gaan dit gedeelte echter verlaten zoals het is. Er zijn twee redenen om dit te doen:
Na de afsluitende Activiteitstag, maar binnen het Applicatie-element, voeg een ander Activiteitselement toe voor het scherm dat we zullen toevoegen om gebruikers een aangepaste klokstijl te laten selecteren:
De activiteit krijgt de naam "ClockChoice" en we zullen toevoegen aan het project in deel 4. Voeg na het nieuwe activiteitselement een ontvangerelement als volgt toe aan uw manifest:
Hier geven we de klasse aan die updates voor de widget zal afhandelen, die "ClockWidget" zullen zijn en AppWidgetProvider zullen uitbreiden. In dit element van de ontvanger, tussen de openingstags en de sluitingstags, voegt u als volgt een doelfilter toe:
Dit geeft aan dat de widget updates gaat ontvangen. Voeg ten slotte, nog steeds binnen het element Ontvanger, een meta-gegevenselement toe:
Hier specificeren we een XML-bestand waarin we de basiseigenschappen van de widget declareren, met behulp van het kenmerk name om aan te geven dat dit bestand gegevens bevat voor een AppWidgetProvider. Bewaar je Manifest-bestand - maak je geen zorgen als je een foutmelding ziet omdat de XML-bron niet kan worden gevonden, we zullen deze als volgende creëren.
Laten we nu de XML-resource maken die we hebben opgegeven in het manifest. De widget-eigenschappen worden in dit bestand gedefinieerd. Voeg in de map met projectresources een nieuwe map toe met de naam "xml" als er daar nog geen is. Klik met de rechtermuisknop op de map "res" (of selecteer deze en kies "Bestand"), selecteer "Nieuw" en vervolgens "Map" en voer "xml" in als mapnaam voordat u op "Voltooien" klikt.
Maak nu een nieuw bestand in deze map door er met de rechtermuisknop op te klikken (of te selecteren en "Bestand" te kiezen), "Nieuw" en vervolgens "Bestand" te kiezen en "clock_widget.xml" in te voeren om overeen te komen met de naam die u in uw Manifest-meta hebt opgenomen gegevenselement.
Klik op "Finish" om het bestand te maken - maak je geen zorgen over eventuele fouten, ze zullen verdwijnen als we onze XML-code toevoegen.
Uw bestand zou automatisch moeten openen in Eclipse. Selecteer het tabblad "clock_widget.xml" om de code te bewerken.
De widget-XML heeft slechts één XML-element nodig - voeg het als volgt toe:
De elementattributen hier zijn de botten van een widget-app. Eerst definiëren we de minimale breedte en hoogte voor de klok widget zoals deze op het scherm van de gebruiker zal verschijnen. We gebruiken dichtheidonafhankelijke pixels om het Android-systeem te laten omgaan met variaties in schermdensiteit. Wanneer u de grootte van een widget berekent, vermenigvuldigt u het aantal gewenste cellen op elke as met 74 en trekt u vervolgens 2 van het resultaat af. We willen dat de klokwidget 2 cellen breed is en 2 cellen in de hoogte, dus de minimale hoogte en breedte zijn beide 146.
De waarde van de updateperiode bepaalt hoe vaak uw widget-app wordt bijgewerkt. Omdat we de Android AnalogClock als basis voor onze widget gebruiken, hoeven we ons niet al te veel zorgen te maken over deze waarde en kunnen we nul leveren. Wanneer u widgets aan het ontwikkelen bent, bent u van plan hier een andere waarde op te geven. Als u deze waarde gebruikt om de updateperiode te bepalen, worden de updates meestal elke 30 minuten uitgevoerd. U kunt echter frequentere updates aanbieden als u een AlarmManager in uw app gebruikt.
Ten slotte geven we de oorspronkelijke lay-out van de widget aan door een lay-outbestand te benoemen, dat we in de volgende zelfstudie aan het project toevoegen - maak je geen zorgen over de fouten die Eclipse intussen weergeeft. Er zijn nog andere kenmerken die u in het element 'appwidget-provider' kunt opnemen, zoals een voorbeeldafbeelding die gebruikers kunnen zien voordat ze uw widget toevoegen. Als u geen voorbeeldweergave geeft, zien gebruikers in plaats daarvan het app-pictogram in de widget. widgetkiezer of menu.
De laatste voorbereidingsstap voor de klokwidget betreft de waardebronnen van de app. Eclipse zou een map "values" in de map "res" voor uw project moeten hebben gemaakt, inclusief het XML-bestand Strings. We gaan vanaf 14 een specifieke waardenmap toevoegen, specifiek voor Android API's. Hierdoor kunnen we bepaalde aspecten van de widget aanpassen aan die API-niveaus, met name de strings die in de interface verschijnen en de dimensiewaarden die we gebruiken om marges toe te passen op de widgetweergave.
Maak een nieuwe map in uw "res" -directory door er met de rechtermuisknop op te klikken (of te selecteren en "Bestand" te kiezen), "Nieuw", "Map" te selecteren en "values-v14" in te voeren voordat u op "Finish" klikt.
Open het Strings XML-bestand uit uw map met hoofdwaarden en selecteer het tabblad "strings.xml" om de code te bekijken.
Bewerk eerst de naam van de toepassing String om iets leesbaarder te worden, als volgt:
Aangepaste klok Widget
Bewerk vervolgens de "hallo" -reeks om instructies te geven:
Hallo \ n \ n Bedankt voor het installeren van de Custom Clock Widget. \ N \ n U moet de widget toevoegen aan uw startscherm om deze te gebruiken. Druk lang op het startscherm en selecteer de widget in de lijst met degenen die op uw apparaat zijn geïnstalleerd.
Dit is de informatieve tekst die wordt weergegeven als de gebruiker de app start of opent nadat deze is geïnstalleerd. Natuurlijk kunt u deze tekst op elke gewenste manier bewerken. Omdat het proces voor het toevoegen van widgets anders is voor apparaten met Android 4.0 en hoger, gebruiken we een iets andere reeks om die gebruikers te targeten. Sla het hoofdbestand met strings op en kopieer en plak het in de map "values-v14". Als u wilt kopiëren, klikt u met de rechtermuisknop op het bestand "strings.xml" in de map "values" (of selecteert u het en kiest u "Edit") en selecteert u vervolgens "Copy". Klik met de rechtermuisknop op "values-v14" om te plakken (of selecteer het en kies "Bewerken") en selecteer "Plakken". Open nu de versie van het Strings XML-bestand in de map "values-v14". Bewerk de 'hallo'-reeks in dit nieuwe exemplaar van het bestand zodat deze geschikt is voor gebruikers op Android 4.0 plus:
Hallo \ n \ n Bedankt voor het installeren van de Custom Clock-widget. U moet de widget toevoegen aan uw startscherm om deze te gebruiken. Selecteer het tabblad Widget in het menu van uw apparaattoepassing. Wanneer u de klok-widget vindt, houdt u deze ingedrukt en laat u deze vallen om toe te voegen aan uw scherm.
Nu ziet elke gebruiker een informatieve reeks die relevant is voor hun eigen apparaat. We nemen deze strings op wanneer we de startactiviteitslay-out maken. Later zullen we een ander bestand aan elke waardenmap toevoegen, maar dit is alles wat we nu nodig hebben.
We hebben nu de installatietaken voor de widget uitgevoerd, dus we zijn klaar om het klokontwerp te implementeren, wat we in de volgende zelfstudie zullen doen. Dit omvat het maken van lay-outbare XML-lay-outbestanden voor de widget- en launcher-activiteitenweergave. In deel 3 behandelen we updates voor de klok en implementeren we de startactiviteit. In Deel 4 zullen we de mogelijkheid toevoegen voor gebruikers om een klokweergaveoptie te kiezen bij het klikken op de widget.