25.02.2014 Aufrufe

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!