Programmeren voor Android
11/11/2011Zo eens per maand breng ik met vrienden een genoeglijk avondje door met klaverjassen. De behaalde scores worden door een der deelnemers nauwgezet op papier bijgehouden. In de praktijk blijkt dat het daarbij behorende rekenwerk soms wat moeilijker wordt, naarmate de avond vordert.
Twee maand geleden heb ik een tablet aangeschaft. Zeer bewust geen Apple iPad. Omdat ik graag zelf iets wil kunnen programmeren voor zo’n apparaat. Om voor een iPad wat te kunnen maken, heb je daarnaast een andere Apple computer nodig, die ik niet bezit en ook niet wens aan te schaffen. Ook het idee dat programma’s voor de iPad enkel via een market kunnen worden verspreid, waar Apple dan nog weer aan verdient, stuit me tegen de borst.
Mijn tablet is derhalve een met als besturingssysteem Android 3.1.
Als ik voor een nieuw systeem programmeer, heb ik graag een concreet doel voor ogen. In plaats van een boek te volgen, kies ik liever zelf een doel en zoek dan in een boek wat ervoor nodig is. Ik wapende mij derhalve met een boek, installeerde Eclipse als programmeeromgeving, de software development kit voor Android (SDK) en de Android Development Tools (ADT) Plugin op mijn Windows PC. Een en ander zorgt ook voor een prima emulator, zodat je alles gewoon op de PC kunt uitproberen voordat je het loslaat op je Android telefoon of tablet.
Hoewel het bij mijn persoon voor de hand zou liggen iets te programmeren wat met het weer te maken heeft, besloot ik te beginnen met een programma om de score van een klaverjas boompje bij te houden. Voor de iPad bestaat zoiets al inclusief een fraaie grafische vormgeving, voor het Android besturingssysteem enkel een vrij kale versie voor mobiele telefoons.
Het berekenen van scores bij klaverjassen is erg simpel. Het totaal aantal punten van de kaarten is altijd 162. Dus als partij A n punten behaalt, heeft partij B 162-n punten. Verder kan er roem gehaald worden, als er bepaalde kaartcombinaties op tafel komen; bijvoorbeeld drie opeenvolgende kaarten in eenzelfde kleur: 20 roem.
De spelende partij moet aan het eind meer punten en roem samen hebben dan de tegenpartij. Zo niet, dan gaat de spelende partij nat en gaan de 162 punten plus alle roem (van beide kanten) naar de tegenpartij. Haalt de spelende partij alle slagen (een mars), dan wordt dat beloond met 100 extra punten.
Goed, dat viel in 45 coderegels te programmeren, inclusief bijhouden van een totaalstand. De programmeertaal voor Android is Java, dat erg lijkt op C++ dat ik al vele jaren gebruik voor mijn Windows programma’s. Piece of cake dus …
Echter, een hele andere kwestie was de interface: wat zet je hoe en waar op het scherm, en hoe reageert je programma als knoppen op het scherm aangeraakt worden. Hier opende zich voor mij een nieuwe wereld. In plaats van het simpel visueel plaatsen, verschuiven en groottes veranderen van knoppen, tekstregels, invoerregels enzovoorts, is voor Android de relatieve lay-out essentieel.
Je deelt het scherm op in een aantal containers, bv. linkerzone is 1/3 , middenstuk is 1/2 en rechterzone is 1/6 van de schermbreedte. In die containers plaats je dan elementen, die je voorziet van een relatieve positie; bijvoorbeeld bovenaan, in het midden, links van knop A, onder knop B, de hele breedte van de container in beslag nemend, enzovoorts. En binnen containers kun je altijd weer andere containers plaatsen.
Ongeacht de grootte van een scherm (verschilt nogal tussen een telefoon of een tablet), de schermresolutie (aantal pixels per inch) of de stand van het scherm (portrait of landscape), komen alle elementen dan altijd op de goede plek terecht. En het is natuurlijk de bedoeling dat een applicatie op allerlei mogelijke Android apparaten draait.
Gestaag doorwerkend kreeg ik uiteindelijk alles op de plaatsen die ik wilde. Via de emulator uitgeprobeerd op een ’telefoontje’, prima. Toen uitgeprobeerd op een tablet zoals ik die heb. Helaas. De posities klopten allemaal als een bus, het programma werkte ook goed, maar de knoppen waren dusdanig klein geworden dat het nergens meer op leek.
Mede omdat ik mijn applet in de praktijk wilde uitproberen, ben ik erg praktisch te werk gegaan, en heb e.e.a. zo aangepast dat het er goed uitziet (en werkt) op mijn tablet. De proef op het eerstvolgende klaverjasavondje werd glansrijk doorstaan.
Kortom. Ik ben erin geslaagd een goed werkende applet voor mijn eigen Android apparaat te maken. Maar hoe e.e.a. op verschillende resoluties/groottes van schermen (dus ook kleinere telefoons) goed te krijgen, is voor mij alsnog een raadsel. Ik laat dit project maar even ‘garen’, wellicht krijgt ik over een poosje ineens een Eureka.
Als een lezer zelf beschikt over een 10.1 inch Android apparaat en ook klaverjast, dan wel geïnteresseerd is in de broncode, mail.