Erstellen einer Android-App

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu FireMonkey-Anwendungshandbuch

Nach oben zu Mobile Android-Anwendungsentwicklung


So erstellen Sie eine Android-App:

Datei > Neu > Mobile Anwendung - Object Pascal

Hinweis: Auf dieser Seite erhalten Sie Informationen zum Entwickeln von FireMonkey-Anwendungen für die Android-Plattform. Themen, die sich nicht auf die Entwicklungsphase beziehen, z. B. das Konfigurieren Ihres PCs und der Android-Geräte für die Zusammenarbeit mit Appmethod, finden Sie unter Mobile Android-Anwendungsentwicklung.

Android-Formulare

Sie können dem mobilen Formular weitere Delphi-Formulare auf dieselbe Weise wie zu Desktop-Anwendungen hinzufügen.

Android-Formulare haben spezielle hardwareabhängige Eigenschaften. Beispielsweise haben sie eine andere Form bzw. beanspruchen eine andere Fläche als Standard-Desktop-Formulare:

  • Bei Android-Anwendungen ist das Standardformular vertikal ausgerichtet:
    • ClientHeight = 480 Pixel
    • ClientWidth = 320 Pixel
    Dies sind dieselben Standardabmessungen wie für iOS-Apps.
  • Bei Desktop-Anwendungen ist das Formular horizontal ausgerichtet:
    • ClientHeight = 480 Pixel
    • ClientWidth = 600 Pixel

Komponentenbeschränkungen bei FireMonkey-Apps für Android

Während des Entwurfs von Android-Apps in Appmethod können Sie nur Komponenten verwenden, die auf Android-Geräten unterstützt werden. Beachten Sie jedoch, dass die Tool-Palette möglicherweise Komponenten enthält, die nur für Windows vorgesehen sind oder von Android nicht unterstützt werden.

Verwenden von Frameworks in Android-Apps

FireMonkey

Das FireMonkey-Framework eignet sich ideal für die Android-Zielplattform und unterstützt auch viele andere Plattformen.

RTL

Einige RTL-Units, die die grundlegende Funktionalität bereitstellen, können auf allen unterstützten Zielplattformen (einschließlich Android) verwendet werden, z. B. System.pas oder System.SysUtils.pas.

Andere RTL-Units sind nur für Android vorgesehen (siehe Android-API). Diesen Units wird der Unit-Gültigkeitsbereich Androidapi vorangestellt.

Android-API

Die RTL enthält einige Units, die Object Pascal-Interfaces für die native Android-API bereitstellen. Diesen Units ist der Gültigkeitsbereich Androidapi vorangestellt, und sie befinden sich in der Regel im Verzeichnis source\rtl\android\ Ihrer Installation von Appmethod. Das FireMonkey-Framework basiert auf einigen dieser Units, verwendet sie jedoch nicht direkt.

Namen von Android-Hauptbibliotheken können nicht als Anwendungsnamen verwendet werden

Sie können Ihrem Projekt keinen Namen zuweisen, der zu einem Konflikt mit dem Namen einer Hauptbibliothek führt, z. B. <libNAME>.so.

Beispielsweise können Sie keinen der folgenden Namen als Projektnamen verwenden:

  • c (steht in Konflikt mit libc.so)
  • m (steht in Konflikt mit libm.so)
  • z (steht in Konflikt mit libz.so)
  • ssl (steht in Konflikt mit libssl.so)
  • ui (steht in Konflikt mit libui.so)
  • gui (steht in Konflikt mit libgui.so)
  • camera_client (steht in Konflikt mit camera_client.so)

usw.

Ausrichtungsempfehlungen für mobile Symbolleisten und andere FireMonkey-Komponenten

Um sicherzustellen, dass das Aussehen und Verhalten der Symbolleiste in Ihren mobilen Apps für die iOS- und Android-Plattformen identisch ist, sollten Sie die Ausrichtungseigenschaften im Objektinspektor wie folgt festlegen:

  • Legen Sie die Eigenschaft Align für alle TToolbar untergeordneten Steuerelemente fest. Die folgenden Beispiele sind Werte für die Eigenschaft Align:
    (alLeft, alRight, alCenter, alContents)
  • Den Abstand zwischen Steuerelementen oder zwischen dem linken und dem rechten Rand von Symbolleisten legen Sie mit den folgenden Eigenschaften fest:
    Beispiel für eine Symbolleiste mit einem TLabel als Titel und zwei links ausgerichtete Schaltflächen mit einem Abstand zwischen jeder Schaltfläche:
    1. Setzen Sie für TToolbar:
      • Align = alTop
    2. Setzen Sie für die untergeordnete TLabel-Komponente:
      • Align = alContents
    3. Setzen Sie die TLabel-Komponente mit dem Kontextmenü nach hinten.
    4. Setzen Sie für die beiden untergeordneten TSpeedButton-Komponenten:
      • Align = alLeft, alRight, alCenter, alContents, alVertCenter
        Beschreibungen dieser Eigenschaften finden Sie unter FMX.Types.TAlignLayout.
      • Margins Left = 5
  • Um ein segmentiertes Steuerelement (mit Stilen versehene TSpeedButtons mit einem gemeinsamen Gruppennamen) zentriert auf der Symbolleiste zu formatieren:
    1. Fügen Sie der TToolBar ein TLayout-Steuerelement hinzu.
    2. Legen Sie TLayout.Align auf alCenter fest.
    3. Fügen Sie dem TLayout Schaltflächen hinzu, und legen Sie Ausrichtungseigenschaften und Ränder für jede Schaltfläche fest (d. h. Align = alLeft, Margins = Left, Margins = Right usw.).
  • Um TLabel zu verwenden, müssen Sie TLabel.AutoSize auf False und die Align-Eigenschaft festlegen.
    • Um die Beschriftung auf der Symbolleiste zu zentrieren, die bereits Schaltflächen enthält, müssen Sie TLabel.Align auf alContents festlegen und im Kontextmenü Nach hinten setzen auswählen.

Für andere Steuerelemente gelten ähnliche Ausrichtungsregeln. Angenommen, Sie haben einem ListBox-Eintrag ein TSwitch hinzugefügt; damit TSwitch rechts ausgerichtet und vertikal zentriert ist, legen Sie die folgenden Eigenschaften fest:

  • Align= alRight
  • Margins Right = 5

Verwenden von benutzerdefinierten Schriftarten in Android-Apps

Sie können eigene Schriftarten in Ihre Schriftartenbibliothek auf Ihrem Entwicklungssystem installieren. Diese Schriftarten sind dann in der IDE beim Entwurf verfügbar. Wenn Sie die App aber auf dem Zielgerät (iOS oder Android) bereitstellen, werden die Schriftarten in der App anhand der auf dem Gerät installierten Schriftarten gerendert. Beim Entwurf in der IDE angezeigte Schriftarten werden nicht auf das Gerät kopiert. Das ist das erwartete Verhalten.

Um festzustellen, ob eine Schriftart zur Laufzeit auf einem bestimmten Gerät zur Verfügung steht, müssen Sie überprüfen, ob die beim Entwurf verwendete Schriftart auf den Zielgeräten unterstützt wird:

Verwenden von modalen Dialogfeldern in mobilen Apps

Modale Dialogfelder, die Benutzereingaben nutzen, werden in Appmethod für Android-Apps nicht direkt unterstützt. Unter Android sind Dialogfelder im Grunde Popups; allgemeine Informationen zu Dialogfeldern unter Android finden Sie unter http://developer.android.com/guide/topics/ui/dialogs.html

Sie können ShowModal unter Android verwenden , wenn Sie ShowModal als anonyme Methode aufrufen, wie unter ShowModal-Dialogfelder in mobilen FireMonkey-Apps beschrieben. Wenn Sie ShowModal so wie für Windows oder Mac OS X aufrufen, könnte dies zu unerwarteten Ergebnissen führen. Eine weitere Strategie ist der Aufruf von Show und nach Rückkehr aus dem Formular der Aufruf Ihres Ereignisses.

Festlegen der erforderlichen Berechtigungen für Ihre Android-Apps

Einige grundlegende Android-Berechtigungen sind für alle FireMonkey-Android-Apps voreingestellt. Sie sollten überprüfen, ob bestimmte Zugriffsberechtigungen für Ihr Android-Gerät auf der Seite Verwendet Berechtigungen der Projektoptionen aktiviert sind.

Zum Beispiel:

  • Um die Kamera des Android-Gerätes verwenden zu können, müssen die folgenden Berechtigungen aktiviert sein:
    • Kamera
    • Externen Speicher lesen/schreiben
  • Zur Verwendung der GPS-Ortung auf dem Android-Gerät müssen Sie mindestens eine der Berechtigungen für den Standortzugriff aktivieren:
    • Auf ungefähren Standort zugreifen
    • Auf genauen Standort zugreifen
    • Auf zusätzliche Standortbefehle zugreifen
  • Um Audio auf dem Android-Gerät aufzunehmen, müssen die folgenden Berechtigungen aktiviert sein:
    • Audio aufzeichnen

Verwenden der "Zurück"-Schaltfläche des Android-Geräts

Damit Ihre Anwendung reagieren kann, wenn der Benutzer die Schaltfläche Zurück auf dem Android-Gerät drückt, fügen Sie dem Formular eine Ereignisbehandlungsroutine für OnKeyUp hinzu und fügen den folgenden Code in diese Ereignisbehandlungsroutine ein:

In Object Pascal:

 
 if Key = vkHardwareBack then
 begin
   // Do whatever you want to do here
   Key := 0; // Set Key = 0 if you want to prevent the default action
 end;

In C++:

 
 if (Key == vkHardwareBack) {
     // Do whatever you want here
     Key = 0; // Set Key = 0 if you want to prevent the default action
 }
Tipp: In der mobilen Vorlage Registerkarten mit Navigation wird diese Ereignisbehandlung implementiert.

Konfigurieren der Anwendung zur Ausführung im Vollbildmodus

Per Vorgabe wird in Android-Anwendungen die Android-Statusleiste/Titelleiste angezeigt.

Wenn Ihre Anwendung im Vollbildmodus ausgeführt und die Android-Statusleiste/Titelleiste ausgeblendet werden soll, wählen Sie Projekt > Optionen > Versionsinformationen und ändern den Wert des Schlüssels theme in Keine TitleBar.

Weitere Informationen finden Sie unter Versionsinformationen.

Einstellungen für Tastatur, TEdit und TMemo

  • Tastatur
    Legen Sie die Eigenschaft vkAutoShowMode auf vkasDefinedBySystem, vkasNever oder vkasAlways fest.
  • TEdit und TMemo
    Legen Sie KillFocusByReturn fest (beim Drücken der Eingabetaste verliert das Steuerelement den Fokus)

Verwenden von Symbolen und Bildern für verschiedene Auflösungen

  • Auf Android werden die folgenden Auflösungen unterstützt:
    1x, 1.5x, 2x, 3x (Klein, Normal, Groß, Sehr groß)
  • Auf iOS werden die folgenden Auflösungen unterstützt:
    1x und 2x (Nicht-Retina und Retina)

Mehrfachauflösungen können durch Erstellen eines MultiResBitmap mit dem neuen MultiResBitmap-Editor unterstützt werden. Weitere Informationen finden Sie unter Verwenden von Bitmaps mit Mehrfachauflösung.

  • MultiResBitmap unterstützt unter Android die folgenden Auflösungen: 1x, 1.5x, 2.5x
    (iOS unterstützt 1x und 2x)

Aktivieren des Features "Löschen per Streifbewegung" für TListView-Einträge

Wenn das Feature "Löschen per Streifbewegung" aktiviert ist, können Android-Endbenutzer über einen Eintrag in einer Listenansicht streifen, und es wird vorübergehend eine Löschen-Schaltfläche auf dem Eintrag angezeigt. Der Benutzer kann dann auf die Löschen-Schaltfläche klicken, um den Eintrag aus der Listenansicht zu löschen, oder die Streifbewegung beenden, um den Eintrag in der Listenansicht beizubehalten. Dieses Feature kann auf mobilen Geräten (iOS und Android) und, sofern die Touch-Eingabe aktiviert ist, auch für Desktop-Apps (Mac OS X und Windows) verwendet werden.

Um das Feature "Löschen per Streifbewegung" für TListView-Einträge festzulegen, setzen Sie die Eigenschaft CanSwipeDelete auf True.

Laden und Bereitstellen von Dateien

Wenn Sie Ihre Anwendung für die Android-Zielplattform bereitstellen möchten und planen, mit der Anwendung Dateien weiterzugeben, die zur Laufzeit geladen werden sollen, müssen Sie zuerst entscheiden, ob diese Dateien auf dem internen Gerätespeicher oder auf einem externen Speicher (z. B. einer SD-Karte) gespeichert werden sollen. Platzieren Sie dann während der Bereitstellung mit dem Bereitstellungs-Manager diese Dateien im Ordner assets\internal (intern) oder assets (extern).

AddDBforAndroidAssets.png

Mit dem folgenden Code können Sie diese Dateien zur Laufzeit lokalisieren:

In Object Pascal:

 
 TPath.Combine(TPath.GetDocumentsPath, 'filename')  { Internal }
 TPath.Combine(TPath.GetSharedDocumentsPath, 'filename')  { External }

In C++:

 
 System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), L"filename") // Internal
 System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDocumentsPath(), L"filename") // External

filename ist hier der Name Ihrer Datei, wie z. B. "dbdemos.gdb" im obigen Screenshot. Der Record TPath wird in der Unit System.IOUtils deklariert, daher müssen Sie System.IOUtils in die uses-Klausel aufnehmen.

Siehe auch