Theis | Einstieg in Kotlin | E-Book | www.sack.de
E-Book

E-Book, Deutsch, 526 Seiten

Reihe: Rheinwerk Computing

Theis Einstieg in Kotlin

Apps entwickeln mit Android Studio
2. Auflage 2021
ISBN: 978-3-8362-8535-3
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection

Apps entwickeln mit Android Studio

E-Book, Deutsch, 526 Seiten

Reihe: Rheinwerk Computing

ISBN: 978-3-8362-8535-3
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection



Android-Apps mit Kotlin – so geht’s!

Einfach und ohne Vorkenntnisse Kotlin lernen. Mit IntelliJ IDEA lernen Sie die Sprache kennen und steigen dann in die App-Entwicklung mit Android Studio ein. Lernen Sie Schritt für Schritt alle wichtigen Sprachkonzepte kennen. Erfahren Sie, wie Sie Bedienoberflächen programmieren, auf verschiedene Sensoren und Systemdienste zugreifen, Daten speichern, Audio- und Videoaufnahmen weiterverarbeiten und selbstverständlich auch, wie Sie Ihre Apps veröffentlichen.

Ganz gleich, ob Sie von Java umsteigen oder Programmieranfänger sind – Kotlin hat einiges zu bieten, was eingefleischte Anwender anderer Sprachen lockt und für Neulinge von vornherein ein Plus darstellt. Thomas Theis bleibt seinem anfängerfreundlichen Stil auch dann treu, wenn es ein wenig komplexer wird.

  • Schritt für Schritt eigene Apps entwickeln
  • Inkl. Sensoren, Animationen, Datenbanken u.v.m.
  • Ideal für Einsteiger und Umsteiger

Aus dem Inhalt:

  • Alle Grundlagen der Programmierung
  • IntelliJ IDEA und Android Studio installieren
  • Verzweigungen, Schleifen und Co.
  • Funktionen und funktionale Programmierung
  • Layouts und Menüs aufbauen
  • Standard-Dialoge
  • Sensoren nutzen
  • Spiele und Trainings entwickeln
  • Datenbanken zur Speicherung
  • Gestensteuerung
  • Zugriffsrechte verwalten
Theis Einstieg in Kotlin jetzt bestellen!

Autoren/Hrsg.


Weitere Infos & Material


  Materialien zum Buch ... 20

  1.  Einführung ... 21


       1.1 ... Kotlin und Android ... 21

       1.2 ... Aufbau dieses Buchs ... 22

       1.3 ... Installation von IntelliJ IDEA ... 23

       1.4 ... Das erste Projekt ... 26

  2.  Variablen, Datentypen und Operatoren ... 29


       2.1 ... Das erste Programm ... 29

       2.2 ... Zeichenketten ... 31

       2.3 ... Ganze Zahlen ... 33

       2.4 ... Zahlen mit Nachkommastellen ... 37

       2.5 ... Rechenoperatoren ... 43

       2.6 ... Logische Werte ... 47

       2.7 ... Nullbare Datentypen ... 51

  3.  Kontrollstrukturen ... 57


       3.1 ... Verzweigungen mit »if« ... 57

       3.2 ... Verzweigungen mit »when« ... 61

       3.3 ... Schleifen mit Bedingungen ... 63

       3.4 ... Schleifen über Bereiche ... 69

       3.5 ... Ausnahmebehandlung ... 71

       3.6 ... Eingaben des Benutzers ... 74

  4.  Daten strukturieren und speichern ... 79


       4.1 ... Array ... 79

       4.2 ... ArrayList ... 83

       4.3 ... Speichern und Lesen in Textdateien ... 85

  5.  Funktionen ... 89


       5.1 ... Grundlagen ... 89

       5.2 ... Vorgabewerte ... 96

       5.3 ... Variable Parameterlisten ... 97

       5.4 ... Externe Funktionen ... 99

       5.5 ... Rekursive Funktionen ... 101

       5.6 ... Erweiterungsmethoden ... 102

       5.7 ... Rückgabewerte destrukturieren ... 103

       5.8 ... Anonyme Funktionen ... 105

       5.9 ... Callback-Funktionen ... 108

       5.10 ... Gültigkeit und Konstanten ... 113

       5.11 ... Debugging ... 115

  6.  Zahlen, Texte und Zeit ... 121


       6.1 ... Mathematik ... 121

       6.2 ... Zahlensysteme und Bit-Operationen ... 125

       6.3 ... Zeichenketten ... 129

       6.4 ... Zeitangaben mit der Klasse Calendar ... 135

       6.5 ... Zeitangaben mit den Local-Klassen ... 139

  7.  Datenstrukturen ... 143


       7.1 ... Arrays, weitere Möglichkeiten ... 143

       7.2 ... Sets ... 150

       7.3 ... Maps ... 153

       7.4 ... Umwandlungen ... 156

  8.  Objektorientierte Programmierung ... 159


       8.1 ... Klassen und Objekte ... 160

       8.2 ... Konstruktoren und Initialisierung ... 166

       8.3 ... Einzigartige Objekte ... 173

       8.4 ... Operatormethoden ... 178

       8.5 ... Datenklassen ... 184

  9.  Vererbung und mehr ... 187


       9.1 ... Ableitung von Klassen ... 187

       9.2 ... Interfaces ... 193

       9.3 ... Abstrakte Klassen ... 197

10.  Entwicklung von Android-Apps ... 203


       10.1 ... Installation von Android Studio ... 203

       10.2 ... Die erste App ... 205

       10.3 ... Ein Projekt im Android Studio ... 208

       10.4 ... App auf virtuellem Gerät starten ... 215

       10.5 ... App auf realem Gerät starten ... 222

11.  Layout, Ressourcen und Ereignisse ... 225


       11.1 ... Layout und Ressourcen ... 225

       11.2 ... Tipps zur Arbeit mit Projekten ... 239

       11.3 ... Ereignisse verarbeiten mit dem »View Binding« ... 243

       11.4 ... Listener-Objekte ... 251

       11.5 ... Logging ... 260

12.  Views zur Eingabe und Auswahl ... 263


       12.1 ... Texte und Zahlen eingeben ... 263

       12.2 ... Werte einstellen mit SeekBars ... 269

       12.3 ... Einfache Auswahl ... 274

       12.4 ... Mehrfache Auswahl ... 278

       12.5 ... Views für Bilder ... 284

13.  Zeitangaben und zeitliche Abläufe ... 289


       13.1 ... Datum und Uhrzeit eingeben ... 289

       13.2 ... Datum auswählen mit CalendarView ... 294

       13.3 ... Datum auswählen mit DatePickerView ... 296

       13.4 ... Uhrzeit auswählen mit TimePickerView ... 299

       13.5 ... Zeitliche Abläufe steuern ... 302

       13.6 ... Mehrere zeitliche Abläufe ... 307

14.  Weitere Layouts und Activitys ... 309


       14.1 ... FrameLayout ... 309

       14.2 ... Lebenszyklus einer Activity ... 315

       14.3 ... Mehrere Activitys ... 317

       14.4 ... Ergebnisse einer Activity ... 323

       14.5 ... Listen und Tabellen ... 328

15.  Gesten, Dialoge und Menüs ... 335


       15.1 ... Antippen ... 335

       15.2 ... Ziehen ... 339

       15.3 ... Wischen ... 341

       15.4 ... Zoomen ... 344

       15.5 ... Dialoge ... 347

       15.6 ... Benachrichtigungen ... 352

       15.7 ... Aktionsmenü ... 356

       15.8 ... Kontextmenüs ... 360

16.  Transformationen und Animationen ... 365


       16.1 ... Transformationen ... 365

       16.2 ... Animationen ... 373

       16.3 ... Interpolatoren ... 379

       16.4 ... Kollisionen ... 383

17.  App-Daten speichern ... 387


       17.1 ... Schlüssel-Wert-Paare ... 387

       17.2 ... Textdatei ... 390

       17.3 ... SQLite-Datenbank ... 395

18.  Sensoren und Audio ... 409


       18.1 ... Sensoren für die Lage ... 409

       18.2 ... Sensoren für die Umgebung ... 419

       18.3 ... Audiodateien abspielen ... 424

19.  Systemdienste ... 433


       19.1 ... Einzelne Systemberechtigung ... 433

       19.2 ... Mehrere Systemberechtigungen ... 439

       19.3 ... Standort ermitteln ... 445

       19.4 ... Content-Provider ... 450

       19.5 ... Daten vorbereiten ... 457

20.  Beispielprojekte ... 461


       20.1 ... Rechentrainer »BruchTraining« ... 461

       20.2 ... Reaktionsspiel »Quadrate« ... 469

       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


2.4    Zahlen mit Nachkommastellen


Zahlen mit Nachkommastellen, auch Fließkommazahlen genannt, werden in Variablen des Datentyps Float oder in Variablen des Datentyps Double gespeichert. Float-Variablen sind nicht so genau wie Double-Variablen. Zudem verfügt der Datentyp Float über einen kleineren Zahlenbereich. Allerdings benötigen Float-Variablen weniger Speicherplatz.

Bei der Ausgabe werden die Nachkommastellen standardmäßig mithilfe des (englischen) Dezimalpunkts abgetrennt. Im Projekt ZahlKomma werden Float- und Double-Variablen anhand einiger Beispiele erläutert.

2.4.1    Datentyp »Float«


Es folgt zunächst Teil 1 des Projekt-Programms:

fun main() {
val f1 = 2.375f
var f2: Float
f2 = 1.0f / 7.0f
println("Float: $f1 $f2")
println("Grenzen: ${Float.MAX_VALUE} ${Float.MIN_VALUE}\n")
...
}

Listing 2.7     Projekt »ZahlKomma«, Teil 1 von 4

Der unveränderlichen Variablen f1 wird der Float-Wert 2.375f zugewiesen. Die Nachkommastellen und das Zeichen f am Ende sorgen dafür, dass sie zu einer Float-Variablen wird. Die veränderliche Variable f2 wird als Float-Variable deklariert. Sie erhält später ihren Wert als Ergebnis der Division der beiden Float-Werte 1.0f und 7.0f.

Die Klasse Float beinhaltet ebenso die Konstanten MIN_VALUE und MAX_VALUE mit den Grenzen des Zahlenbereichs.

Die Ausgabe dieses Programmteils:

Float: 2.375 0.14285715
Grenzen: 3.4028235E38 1.4E-45

Anhand der Ausgabe sehen Sie, dass Float-Werte nur mit einer Genauigkeit von sechs bis sieben Stellen nach dem Komma gespeichert werden. Zum Rechnen mit einer größeren Genauigkeit werden Double-Variablen benötigt.

Sehr große oder sehr kleine Werte werden im Exponentialformat ausgegeben. Die Angabe 1.5e9 würde der Zahl 1,5 × 109 entsprechen, also der Zahl 1.500.000.000. Die Angabe 1.5e-9 würde der Zahl 1,5 × 10–9 entsprechen, also der Zahl 0,0000000015. Die beiden Werte in der Ausgabe repräsentieren die Zahlen 3,4028235 × 1038 bzw. 1,4 × 10-45.

2.4.2    Datentyp »Double«


Nachfolgend Teil 2 des Programms:

fun main() {
...
val d1 = 2.375
var d2: Double
d2 = 1.0 / 7.0
println("Double: $d1 $d2")
println("Grenzen: ${Double.MAX_VALUE} ${Double.MIN_VALUE}\n")
...
}

Listing 2.8     Projekt »ZahlKomma«, Teil 2 von 4

Der unveränderlichen Variablen d1 wird der Double-Wert 2.375 zugewiesen, ohne f am Ende. Die Nachkommastellen sorgen dafür, dass sie zu einer Double-Variablen wird. Die veränderliche Variable d2 wird als Double-Variable deklariert. Sie erhält später ihren Wert als Ergebnis der Division der beiden Double-Werte 1.0 und 7.0.

Auch hier beinhaltet die zugehörige Klasse Double die Konstanten MIN_VALUE und MAX_VALUE mit den Grenzen des Zahlenbereichs.

Die Ausgabe dieses Programmteils:

Double: 2.375 0.14285714285714285
Grenzen: 1.7976931348623157E308 4.9E-324

Sie sehen, dass Double-Werte mit einer Genauigkeit von 15 bis 16 Stellen nach dem Komma gespeichert werden. Zudem ist der Zahlenbereich wesentlich größer.

Versuchen Sie, einen Wert zuzuweisen, der oberhalb des Zahlenbereichs liegt, erscheint eine Warnung, und es wird der Wert Infinity (dt.: unendlich) angenommen. Mit diesem Wert können Sie keine Berechnungen mehr vornehmen. Versuchen Sie, einen Wert zuzuweisen, der unterhalb des Zahlenbereichs liegt, erscheint eine Warnung, und es wird der Wert 0 angenommen.

2.4.3    Exponentialwerte


Wie bereits erwähnt, bieten Exponentialwerte die Möglichkeit, mit sehr großen oder sehr kleinen Werten zu arbeiten, ohne viele Nullen vor oder nach dem Komma anzugeben. Ihre Werte werden im Code mithilfe eines e oder E gekennzeichnet. Es folgt Teil 3 des Programms:

fun main() {
...
val e1 = 1.5e9
val e2 = 1.5e-9
println("Exponential: $e1 $e2\n")
...
}

Listing 2.9     Projekt »ZahlKomma«, Teil 3 von 4

Die Ausgabe dieses Programmteils:

Exponential: 1.5E9 1.5E-9

2.4.4    Formatierung


Soll eine Zahl mit Nachkommastellen formatiert, also auf eine bestimmte Anzahl an Nachkommastellen gerundet werden, haben Sie verschiedene Möglichkeiten.

Zunächst der vierte und letzte Teil des Programms:

import java.text.NumberFormat
import java.util.Locale
import kotlin.math.*

fun main() {
...
val nfg = NumberFormat.getInstance()
nfg.maximumFractionDigits = 3
println("DE-Format: " + nfg.format(d2))

val nfu = NumberFormat.getInstance(Locale.US)
nfu.maximumFractionDigits = 3
println("US-Format: " + nfu.format(d2))

println("Runden: " + round(d2 * 1e3) / 1e3)
}

Listing 2.10     Projekt »ZahlKomma«, Teil 4 von 4

Das Schlüsselwort import wird benötigt, um einem Programm zusätzliche Klassen oder Paketinhalte zur Verfügung zu stellen. Die Klasse NumberFormat aus dem Paket java.text bietet Möglichkeiten zur Formatierung von Zahlen.

Wird die statische Methode getInstance() der Klasse NumberFormat ohne Parameter aufgerufen, liefert sie ein Objekt der Klasse NumberFormat mit den im aktuellen System genutzten Formatangaben, hier also den deutschen Formatangaben. Diese beinhalten zum Beispiel ein Komma zur Abtrennung von Dezimalstellen einer Zahl.

Mithilfe der Eigenschaft maximumFractionDigits können Sie für ein solches NumberFormat-Objekt die maximale Anzahl an Nachkommastellen festlegen, auf die mithilfe dieser Formatangabe gerundet werden kann.

Die Methode format() liefert für ein NumberFormat-Objekt eine Zeichenkette. Diese beinhaltet den Wert, der als Parameter übergeben wird, im zuvor festgelegten Format.

Hinweis

Die Eigenschaft maximumFractionDigits dient in Kotlin zur Vereinfachung der Nutzung der beiden Methoden setMaximumFractionDigits() zum Festlegen der genannten Anzahl und getMaximumFractionDigits() zum Ermitteln der genannten Anzahl. Solche Eigenschaften stehen in Kotlin für viele Methoden zur Verfügung.

Statische Methoden werden nicht für ein bestimmtes Objekt einer Klasse ausgeführt, sondern für die gesamte Klasse. Mehr zur objektorientierten Programmierung sehen Sie in Kapitel 8.

Ein Objekt der Klasse Locale aus dem Paket java.util repräsentiert eine bestimmte Region inklusive der in dieser Region genutzten Formatangaben. Die gewünschte Region wird mithilfe einer Konstanten dieser Klasse festgelegt. Die Konstante US steht für die USA als Region.

Wird die Methode getInstance() mit einem Locale-Objekt als Parameter aufgerufen, liefert sie ein NumberFormat-Objekt mit den zugehörigen Formatangaben. Diese beinhalten zum Beispiel einen Punkt zur Abtrennung von Dezimalstellen einer Zahl.

Mit import kotlin.math.* werden alle Eigenschaften und Methoden des Pakets kotlin.math zur Verfügung gestellt. Die Methode round() dient zum Auf- und Abrunden einer Zahl mit Nachkommastellen auf eine ganze Zahl. In diesem Fall soll auf eine bestimmte Anzahl x an Nachkommastellen gerundet werden. Zu diesem Zweck wird die Zahl zunächst mit 10x multipliziert, anschließend gerundet, danach wieder durch 10x dividiert.

Die Ausgabe dieses letzten Programmteils:

DE-Format: 0,143
US-Format: 0.143
Runden: 0.143

2.4.5    Hilfestellung von IntelliJ IDEA


An dieser Stelle erfolgt ein wichtiger thematischer Einschub. In Projekten müssen häufig zusätzliche Elemente importiert werden. Der Editor von IntelliJ IDEA (und später auch von Android Studio) hilft Ihnen dabei. Das wird am Beispiel des Programmteils aus Abschnitt 2.4.4 gezeigt.

Nehmen wir an, Sie haben noch keine import-Anweisung erstellt und notieren die nachfolgende Anweisung:

val nfg = NumberFormat.getInstance()

Der...


Theis, Thomas
Thomas Theis ist Dipl.-Ing. für Technische Informatik. Als Softwareentwickler verfügt er über langjährige Erfahrung, ebenso als IT-Dozent unter anderem an der Fachhochschule Aachen. Er ist Autor vieler erfolgreicher Fachbücher, zum Beispiel zu den Themen Python, C#, PHP, JavaScript, C++ und Unity.



Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.