Android User Navigation (Vorschau)
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Devcorner<br />
Dasher, Teil II<br />
Abb. 3: Das Klassendiagramm des <strong>Android</strong> Clients von Dasher.<br />
Listing 1: Cursorposition ermitteln<br />
Objekte, DasherViewPort und FrameManager,<br />
die neuen Maße der Eingabefläche erhalten,<br />
damit sie Dasher entsprechend anpassen<br />
können.<br />
Die Klasse FrameManager ist für das Zoomen<br />
verantwortlich, wobei der momentane<br />
Ausschnitt des gesamten Dasher-Raums anhand<br />
der gegenwärtigen Fingerposition laufend<br />
verändert wird. Dasher kann aber auch<br />
mithilfe von Pinch-Gesten bewegt werden.<br />
Zusätzlich ist sie auch für die Anpassung der<br />
Dasher-Laufgeschwindigkeit zuständig.<br />
Die Klasse DasherViewPort berechnet anhand<br />
der vom FrameManager gelieferten Information<br />
die Position und Größe der verschiedenen<br />
Symbolquadrate, die auf dem<br />
Bildschirm dargestellt werden. Des Weiteren<br />
testet sie, ob ein Quadrat so groß geworden<br />
ist, dass es das Zentralkreuz bedeckt.<br />
Die Klassen SQLiteLanguageModel und SQ-<br />
LiteModelFactory erlauben den Zugriff auf<br />
die SQLite Datenbank.<br />
private int getCursorPosition(InputConnection connection) {<br />
ExtractedTextRequest req = new ExtractedTextRequest();<br />
req.flags = InputConnection.GET_TEXT_WITH_STYLES;<br />
req.hintMaxLines = 10;<br />
req.hintMaxChars = 10000;<br />
ExtractedText extracted = connection.getExtractedText(req, 0);<br />
if (extracted == null) {<br />
return ‐1;<br />
}<br />
return extracted.startOffset + extracted.selectionStart;<br />
}<br />
Immer im Vollbild<br />
Damit Dasher mehr Platz zum Zeichnen erhält,<br />
stellen wir die Texteingabemethode<br />
immer im Fullscreeen-Modus dar, was einige<br />
Anpassungen der Standard-Handhabung<br />
von InputMethodeService und SurfaceView<br />
verlangt:<br />
• Damit Dasher den ganzen Bildschirm einnimmt,<br />
muss die Methode DasherInput-<br />
Manager.onEvaluateFullscreenMode() derart<br />
überschrieben werden, dass sie immer<br />
den boolean Wert true zurückgibt.<br />
• Die <strong>Android</strong>-Vollbild-Implementation InputMethodService<br />
bewirkt, dass der gewählte<br />
Input Method Editor (IME) den<br />
ganzen Bildschirm ausfüllt, und somit die<br />
eigentliche Applikation vollständig zudeckt<br />
und keinen Weg zurück bietet. Glücklicherweise<br />
generiert <strong>Android</strong> automatisch<br />
ein extra Editierfeld (vom Typ Extract-<br />
EditText) am oberen Bildschirmrand (Abbildung<br />
4). Das neue Editierfeld ist eine<br />
Art Kopie des eigentlichen Texteditor-Feldes,<br />
das sich in der darunterliegenden<br />
Applikation befindet und in welches geschrieben<br />
wird. Ärger bereitet die Tatsache,<br />
dass dieses extra Editierfeld nur dann<br />
sichtbar wird, wenn die Input View genügend<br />
Platz dafür frei lässt. Dies stört vor<br />
allem im Landscape-Modus (Querformat).<br />
Deshalb mussten wir in der DasherInput-<br />
View Klasse die Methode onMeasure() so<br />
überschreiben, dass die Höhe der Input<br />
View auf 5/8 der Höhe des Handydisplays<br />
beschränkt wird. (Dieser Bruchteil wurde<br />
empirisch bestimmt.)<br />
110<br />
März 2012<br />
<strong>Android</strong>-<strong>User</strong>.de