Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Materialien zum Buch
20
1 Einführung
21
1.1 Kotlin und Android
21
1.2 Aufbau dieses Buchs
22
1.2.1 Der Einstieg in Kotlin
22
1.2.2 Apps mit dem Android Studio
22
1.2.3 Optimierung des Codes
23
1.3 Installation von IntelliJ IDEA
23
1.4 Das erste Projekt
26
1.4.1 Die Arbeit mit Projekten
28
2 Variablen, Datentypen und Operatoren
29
2.1 Das erste Programm
29
2.2 Zeichenketten
31
2.3 Ganze Zahlen
33
2.3.1 Datentyp »Int«
33
2.3.2 Datentyp »Long«
35
2.3.3 Grenzen der Zahlenbereiche
35
2.3.4 Hexadezimal- und Dualzahlen
36
2.4 Zahlen mit Nachkommastellen
37
2.4.1 Datentyp »Float«
37
2.4.2 Datentyp »Double«
38
2.4.3 Exponentialwerte
39
2.4.4 Formatierung
39
2.4.5 Hilfestellung von IntelliJ IDEA
41
2.5 Rechenoperatoren
43
2.5.1 Rechenregeln
43
2.5.2 Division
44
2.5.3 Kombinierte Zuweisungen
45
2.5.4 Inkrement und Dekrement
46
2.6 Logische Werte
47
2.6.1 Boolean-Variablen
47
2.6.2 Vergleichsoperatoren
47
2.6.3 Zahlenbereiche
48
2.6.4 Logische Operatoren
49
2.7 Nullbare Datentypen
51
2.7.1 Nicht-nullbare Datentypen
52
2.7.2 Nullbare Datentypen
53
2.7.3 Smart-Casts
54
2.7.4 Elvis-Operator »?:«
55
2.7.5 Nicht-Null-Operator »!!«
56
3 Kontrollstrukturen
57
3.1 Verzweigungen mit »if«
57
3.1.1 Block von Anweisungen
57
3.1.2 Einzelne Anweisung
58
3.1.3 Mehrfache Verzweigung
59
3.1.4 Funktionales »if«
60
3.2 Verzweigungen mit »when«
61
3.2.1 Klassisches »when«
61
3.2.2 Funktionales »when«
62
3.3 Schleifen mit Bedingungen
63
3.3.1 Zufallszahlen
63
3.3.2 Schleifen mit »while«
65
3.3.3 Schleifen mit »do-while«
66
3.3.4 Schleifen abbrechen
66
3.3.5 Schleifen fortsetzen
67
3.3.6 Schleife abbrechen oder fortsetzen mit »when«
68
3.4 Schleifen über Bereiche
69
3.4.1 Schleifen für ganze Zahlen
69
3.4.2 Schleifen für Zahlen mit Nachkommastellen
70
3.5 Ausnahmebehandlung
71
3.5.1 Klassische Ausnahmebehandlung
72
3.5.2 Funktionale Ausnahmebehandlung
73
3.6 Eingaben des Benutzers
74
3.6.1 Eingabe eines Textes
75
3.6.2 Eingabe einer ganzen Zahl
75
3.6.3 Eingabe einer Zahl mit Nachkommastellen
76
4 Daten strukturieren und speichern
79
4.1 Array
79
4.1.1 Allgemeine Arrays
79
4.1.2 Besondere Typen von Arrays
80
4.1.3 Arrays bestimmter Größe
82
4.1.4 Arrays vergrößern
82
4.2 ArrayList
83
4.2.1 Elemente hinzufügen
83
4.2.2 Elemente entfernen
84
4.3 Speichern und Lesen in Textdateien
85
4.3.1 Speichern in Textdateien
86
4.3.2 Lesen aus Textdateien
87
5 Funktionen
89
5.1 Grundlagen
89
5.1.1 Einfache Funktionen
89
5.1.2 Funktionen mit Parametern
90
5.1.3 Funktionen mit Rückgabewert
91
5.1.4 Benannte Parameter
92
5.1.5 Verkürzte Definition
93
5.1.6 Funktionen überladen
94
5.1.7 Objekte als Parameter oder als Rückgabewert
95
5.2 Vorgabewerte
96
5.3 Variable Parameterlisten
97
5.3.1 Nur variable Liste
97
5.3.2 Kombination mit variabler Liste
98
5.4 Externe Funktionen
99
5.4.1 Neue Datei erstellen
99
5.4.2 Neue Datei nutzen
100
5.5 Rekursive Funktionen
101
5.6 Erweiterungsmethoden
102
5.7 Rückgabewerte destrukturieren
103
5.7.1 Destrukturierung eines Arrays
103
5.7.2 Pair-Objekte
104
5.7.3 Triple-Objekte
104
5.8 Anonyme Funktionen
105
5.8.1 Einfache anonyme Funktionen
106
5.8.2 Anonyme Funktionen mit Parameter und Rückgabewert
106
5.9 Callback-Funktionen
108
5.9.1 Eigene Funktionen
108
5.9.2 Vorgefertigte Methoden für Arrays
110
5.9.3 Vorgefertigte Methoden für ArrayLists
112
5.9.4 Eine Funktion zur Wiederholung
112
5.10 Gültigkeit und Konstanten
113
5.11 Debugging
115
5.11.1 Ablauf ohne Debugging
115
5.11.2 Haltepunkte und Einzelschritte
117
5.11.3 Ablauf mit Funktionen
118
6 Zahlen, Texte und Zeit
121
6.1 Mathematik
121
6.1.1 Mathematische Konstanten
121
6.1.2 Betrag, Vorzeichen, Extremwerte und Rundung
122
6.1.3 Winkelfunktionen
123
6.1.4 Wurzel, Exponential- und Logarithmusfunktionen
124
6.2 Zahlensysteme und Bit-Operationen
125
6.2.1 Zahlensysteme
125
6.2.2 Verknüpfungs-Operatoren
126
6.2.3 Shift-Operatoren
127
6.2.4 Inversion
127
6.2.5 Analyse von Dualzahlen
128
6.3 Zeichenketten
129
6.3.1 Länge, Zeichen und Teile
129
6.3.2 Prüfen, suchen und ersetzen
130
6.3.3 Unicode, Umwandlung und Vergleich
132
6.3.4 Leerzeichen, trennen und verbinden
133
6.4 Zeitangaben mit der Klasse Calendar
135
6.4.1 Speichern und ausgeben
135
6.4.2 Setzen und ändern
136
6.4.3 Messen
138
6.4.4 Alter ermitteln
138
6.5 Zeitangaben mit den Local-Klassen
139
6.5.1 Speichern und ausgeben
139
6.5.2 Setzen und ändern, Zeiträume ermitteln
140
6.5.3 Messen
142
7 Datenstrukturen
143
7.1 Arrays, weitere Möglichkeiten
143
7.1.1 Index und Zufall
143
7.1.2 Analyse und Statistik
144
7.1.3 Kopie und Verweis
145
7.1.4 Arrays aus Arrays erzeugen
146
7.1.5 Arrays intern ändern
147
7.1.6 Mehrdimensionale Arrays
148
7.2 Sets
150
7.2.1 Erzeugen und Mengenoperationen
150
7.2.2 Hinzufügen und entfernen
152
7.3 Maps
153
7.3.1 Erzeugung und Analyse
153
7.3.2 Hinzufügen und entfernen
155
7.4 Umwandlungen
156
8 Objektorientierte Programmierung
159
8.1 Klassen und Objekte
160
8.1.1 Neue Klassendatei erstellen
160
8.1.2 Klasse definieren
161
8.1.3 Objekte erstellen und verändern
163
8.1.4 Accessoren definieren
164
8.1.5 Accessoren verwenden
165
8.2 Konstruktoren und Initialisierung
166
8.2.1 Primärkonstruktor
166
8.2.2 Initialisierungsblock
168
8.2.3 Sekundärkonstruktoren
169
8.2.4 Das Schlüsselwort »lateinit«
171
8.3 Einzigartige Objekte
173
8.3.1 Benanntes Singleton-Objekt
173
8.3.2 Anonymes Singleton-Objekt mit Verweis
174
8.3.3 Anonymes Singleton-Objekt ohne Verweis
175
8.3.4 Companion-Objekt
176
8.4 Operatormethoden
178
8.4.1 Ausgabe des Programms
179
8.4.2 Definition der Operatormethoden
180
8.4.3 Definition weiterer Methoden
182
8.4.4 Verwendung der Klasse
183
8.5 Datenklassen
184
9 Vererbung und mehr
187
9.1 Ableitung von Klassen
187
9.1.1 Definition der Basisklasse
188
9.1.2 Definition der abgeleiteten Klasse
189
9.1.3 Erstellen von Objekten
191
9.1.4 Ändern von Objekten
192
9.2 Interfaces
193
9.2.1 Definitionen der Interfaces
193
9.2.2 Implementierung eines Interface
194
9.2.3 Verwendung der Klasse mit einem Interface
195
9.2.4 Implementierung mehrerer Interfaces
195
9.2.5 Verwendung der Klasse mit mehreren Interfaces
196
9.2.6 Singleton-Objekt mit einem Interface
197
9.3 Abstrakte Klassen
197
9.3.1 Definition der abstrakten Klasse
198
9.3.2 Definition der konkreten Klasse »Kreis«
199
9.3.3 Definition der konkreten Klasse »Rechteck«
200
9.3.4 Verwendung der beiden Klassen
201
10 Entwicklung von Android-Apps
203
10.1 Installation von Android Studio
203
10.2 Die erste App
205
10.2.1 Projekttyp und Activity auswählen
205
10.2.2 Projekt konfigurieren
206
10.2.3 Synchronisierung, Fehler und Updates
208
10.3 Ein Projekt im Android Studio
208
10.3.1 Die Datei MainActivity.kt
209
10.3.2 Die Datei activity_main.xml
210
10.3.3 Die Arbeit mit Projekten
214
10.4 App auf virtuellem Gerät starten
215
10.4.1 Ein virtuelles Gerät erstellen
216
10.4.2 App starten und beenden
221
10.5 App auf realem Gerät starten
222
10.5.1 Reales Gerät vorbereiten
222
10.5.2 App starten und beenden
222
11 Layout, Ressourcen und Ereignisse
225
11.1 Layout und Ressourcen
225
11.1.1 Das fertige Layout
225
11.1.2 Erste View im ConstraintLayout
227
11.1.3 Constraint Widget
228
11.1.4 Groß- und Kleinbuchstaben
229
11.1.5 ID einer View
230
11.1.6 Textinhalt einer View
230
11.1.7 Alle eingestellten Eigenschaften
231
11.1.8 Eine View neben einer View
233
11.1.9 Eine View unter einer View
234
11.1.10 Eine View horizontal zentriert zwischen den Rändern
234
11.1.11 Eine View am rechten Rand
235
11.1.12 Eine View erstreckt sich bis zum Rand
235
11.1.13 Breite von Views einheitlich einstellen
236
11.1.14 Eine View erstreckt sich zwischen zwei Views
238
11.2 Tipps zur Arbeit mit Projekten
239
11.2.1 Mehrere Projekte öffnen
239
11.2.2 Projekte kopieren oder umbenennen
240
11.2.3 Eine App startet nicht mehr
242
11.2.4 Ein Projekt lässt sich nicht mehr öffnen
243
11.3 Ereignisse verarbeiten mit dem »View Binding«
243
11.3.1 Projekt mit Benutzeroberfläche erstellen
243
11.3.2 String-Ressourcen und Layout-Datei
244
11.3.3 Der generierte Code
245
11.3.4 Die Klasse für das View Binding
246
11.3.5 Der geänderte Code
247
11.3.6 Änderung des Bildschirms
249
11.3.7 Android- und Kotlin-Hilfe
250
11.3.8 Hilfen und Anmerkungen des Editors
250
11.3.9 Weitere Projekte
251
11.4 Listener-Objekte
251
11.4.1 Aktuelles Activity-Objekt
252
11.4.2 Hilfestellung von Android Studio
253
11.4.3 Eigene Klasse
254
11.4.4 Benanntes Singleton-Objekt
255
11.4.5 Anonymes Singleton-Objekt mit Verweis
256
11.4.6 Anonymes Singleton-Objekt ohne Verweis
257
11.4.7 Anonyme Funktion
258
11.4.8 Nicht genutzte Parameter
259
11.4.9 Der Parameter »it«
259
11.4.10 Die kompakte Variante
260
11.5 Logging
260
11.5.1 Programm
261
12 Views zur Eingabe und Auswahl
263
12.1 Texte und Zahlen eingeben
263
12.1.1 Texte und Passwörter eingeben
263
12.1.2 Layout für Texte und Passwörter
264
12.1.3 Texte und Passwörter verarbeiten
265
12.1.4 Zahlen eingeben
266
12.1.5 Layout für die Eingabe von Zahlen
266
12.1.6 Zahlen verarbeiten
268
12.1.7 Warnungen und Fehlermeldungen
268
12.2 Werte einstellen mit SeekBars
269
12.2.1 Layout der SeekBars
270
12.2.2 Betätigung der SeekBars
271
12.2.3 Betätigung der Buttons
273
12.3 Einfache Auswahl
274
12.3.1 CheckBox
274
12.3.2 ToggleButton
276
12.3.3 Switch
277
12.4 Mehrfache Auswahl
278
12.4.1 RadioGroup
279
12.4.2 Spinner
281
12.5 Views für Bilder
284
12.5.1 Bildressourcen
285
12.5.2 Darstellung
286
12.5.3 Programm
287
13 Zeitangaben und zeitliche Abläufe
289
13.1 Datum und Uhrzeit eingeben
289
13.1.1 Darstellung
289
13.1.2 Startzustand
290
13.1.3 Datum eingeben
291
13.1.4 Uhrzeit eingeben
293
13.2 Datum auswählen mit CalendarView
294
13.2.1 Layout der View
295
13.2.2 Auswahl verarbeiten
295
13.3 Datum auswählen mit DatePickerView
296
13.3.1 Layout der View
297
13.3.2 Auswahl verarbeiten
298
13.4 Uhrzeit auswählen mit TimePickerView
299
13.4.1 Layout der View
301
13.4.2 Auswahl verarbeiten
301
13.5 Zeitliche Abläufe steuern
302
13.5.1 Bedienung und Anzeige
303
13.5.2 Layout der Fortschrittsanzeige
303
13.5.3 Steuerung des Ablaufs
304
13.6 Mehrere zeitliche Abläufe
307
14 Weitere Layouts und Activitys
309
14.1 FrameLayout
309
14.1.1 Umwandlung zum FrameLayout
310
14.1.2 Views im FrameLayout
310
14.1.3 Dynamische Erzeugung von Views
312
14.1.4 Immer im Hochformat
314
14.2 Lebenszyklus einer Activity
315
14.3 Mehrere Activitys
317
14.3.1 Die fertige App
318
14.3.2 Erzeugung einer Activity
318
14.3.3 Manifestdatei
320
14.3.4 Haupt-Activity
320
14.3.5 Unter-Activity
321
14.4 Ergebnisse einer Activity
323
14.4.1 Die fertige App
323
14.4.2 Haupt-Activity
325
14.4.3 Unter-Activity
327
14.5 Listen und Tabellen
328
14.5.1 Die fertige App
328
14.5.2 Gesamtlayout
329
14.5.3 Layout eines Eintrags
330
14.5.4 Klasse eines Eintrags
331
14.5.5 Schnittstelle für die RecyclerView
332
14.5.6 Haupt-Activity
333
15 Gesten, Dialoge und Menüs
335
15.1 Antippen
335
15.1.1 Langes Antippen
336
15.1.2 Doppeltes Antippen
337
15.2 Ziehen
339
15.3 Wischen
341
15.4 Zoomen
344
15.5 Dialoge
347
15.5.1 Toasts
347
15.5.2 Snackbars
348
15.5.3 Infos
349
15.5.4 Fragen
350
15.5.5 Eingaben
351
15.6 Benachrichtigungen
352
15.6.1 Die fertige App
352
15.6.2 Activity für die Benachrichtigung
353
15.6.3 Auslösen der Benachrichtigung
354
15.7 Aktionsmenü
356
15.7.1 Aufbau des Menüs
356
15.7.2 Bedienung des Menüs umsetzen
359
15.8 Kontextmenüs
360
15.8.1 Aufbau der beiden Menüs
361
15.8.2 Bedienung der beiden Menüs umsetzen
363
16 Transformationen und Animationen
365
16.1 Transformationen
365
16.1.1 Die fertige App
365
16.1.2 Verschiebung
366
16.1.3 Skalierung
368
16.1.4 Drehung
370
16.1.5 Änderung der Farbe
372
16.2 Animationen
373
16.2.1 Die fertige App
373
16.2.2 Animation erstellen
375
16.2.3 Listener für die Animation
376
16.2.4 Steuerung der Animation
377
16.3 Interpolatoren
379
16.3.1 Die fertige App
379
16.3.2 Auswahl des Interpolators
380
16.3.3 Aufbau der Pfad-Interpolation
381
16.3.4 Weitere Interpolatoren
382
16.4 Kollisionen
383
16.4.1 Die fertige App
383
16.4.2 Layout der Views
384
16.4.3 Der Ablauf für die Kollision
384
17 App-Daten speichern
387
17.1 Schlüssel-Wert-Paare
387
17.1.1 Schreiben von Daten
388
17.1.2 Lesen von Daten
389
17.1.3 Löschen von Daten
390
17.2 Textdatei
390
17.2.1 Schreiben in die Datei
391
17.2.2 Anhängen am Ende der Datei
392
17.2.3 Leeren der Datei
393
17.2.4 Inhalt in Zeichenkette speichern
393
17.2.5 Inhalt in Liste speichern
394
17.3 SQLite-Datenbank
395
17.3.1 Datenbanksprache SQL
395
17.3.2 Datenbanksystem SQLite
396
17.3.3 Die fertige App
396
17.3.4 Aufbau der Datenbankklasse
398
17.3.5 Schreiben eines Datensatzes
399
17.3.6 Lesen aller Datensätze
401
17.3.7 Ändern von Datensätzen
403
17.3.8 Löschen von Datensätzen
405
18 Sensoren und Audio
409
18.1 Sensoren für die Lage
409
18.1.1 Die fertige App
410
18.1.2 Virtuelle und reale Sensoren
411
18.1.3 Lineare Beschleunigung
413
18.1.4 Dreh-Beschleunigung
416
18.1.5 Magnetfeld
417
18.2 Sensoren für die Umgebung
419
18.2.1 Die fertige App
419
18.2.2 Virtuelle und reale Sensoren
420
18.2.3 Programm
421
18.3 Audiodateien abspielen
424
18.3.1 Die fertige App
424
18.3.2 Audioressourcen
426
18.3.3 Einfaches Abspielen
427
18.3.4 Komfortables Abspielen
428
19 Systemdienste
433
19.1 Einzelne Systemberechtigung
433
19.1.1 Die fertige App
433
19.1.2 Manifestdatei
436
19.1.3 Prüfen und anfordern
436
19.1.4 Antworten auswerten
438
19.2 Mehrere Systemberechtigungen
439
19.2.1 Die fertige App
440
19.2.2 Manifestdatei
442
19.2.3 Prüfen und anfordern
442
19.2.4 Antworten auswerten
444
19.3 Standort ermitteln
445
19.3.1 Die fertige App
446
19.3.2 Manifestdatei
447
19.3.3 Berechtigungen
447
19.3.4 Standortdaten ermitteln
449
19.3.5 Ressourcen sparen
449
19.4 Content-Provider
450
19.4.1 Die fertige App
451
19.4.2 Manifestdatei
453
19.4.3 Berechtigungen
453
19.4.4 Kontaktliste anzeigen
454
19.4.5 Kontakt hinzufügen
455
19.5 Daten vorbereiten
457
20 Beispielprojekte
461
20.1 Rechentrainer »BruchTraining«
461
20.1.1 Die fertige App
461
20.1.2 Leichte Aufgabe
464
20.1.3 Mittelschwere Aufgabe
465
20.1.4 Schwere Aufgabe
467
20.2 Reaktionsspiel »Quadrate«
469
20.2.1 Die fertige App
469
20.2.2 Überblick
470
20.2.3 Programmrahmen
471
20.2.4 Neues Quadrat erzeugen
472
20.2.5 Zielfarbe ändern
474
20.2.6 Zeitanzeige aktualisieren
475
20.3 Reaktionsspiel »Zoo«
476
Anhang
477
A Virtuelle Geräte verwalten
479
B App veröffentlichen
481
C Installationen unter Ubuntu Linux
491
D Installationen unter macOS
501
E Weiterführende Links
509
Index
511