![]() |
Fragen zu FMX unter Android
Hallo,
ich habe mich inzwischen einigermaßen voran gearbeitet, meine App läuft soweit unter Android. Ich habe jedoch einige Punkte, die ich einfach nicht lösen kann, Google half leider auch nicht weiter: - Gerät sperren/entsperren Wenn meine App läuft und ich das Gerät sperre/entsperre, dann ist meistens die Anwendung nur noch ein einziger Klumpen, man sieht also keinen Text, keine Buttons, nix mehr. Ich habe schon mit "AddAppEventHandler" / "AppEventHandler" das Event "BecameActive" sowie "WillBecomeForeground" abgefangen und dort ein "Form.Invalidate" sowie "Application.Processmessages" gemacht, hilft leider nicht. - Buttons / Themes Ich verwende ein Std. Android-Theme für FMX, außerdem auf der Form Buttons mit dem Stylelookup "nexttoolbutton". Blödeweise kann man das Symbol teilweise sehr schlecht lesen. Kann man das im Designer ändern (also die Konturen heller machen) oder muss ich extra den Style anpassen? - App beenden Ich weiß, dass eine App eigentlich nicht beendet werden sollte, ich tue es trotzdem :) Dafür verwende ich "SharedActivity.finish;". Das funktioniert in den meisten Fällen, manchmal kann ich die App jedoch anschließend nicht mehr starten, es kommt dann nur noch ein grauer Klumpen (wie bei Punkt 1). Laut Task-Manager ist das Programm aber vorher korrekt geschlossen. Insgesamt verläuft die Entwicklung erstaunlich gut und einfach, ich habe es allerdings erst auf meinem S4 getestet. Mal schauen, was auf einem Note passiert :) Bis zu diesem Zeitpunkt muss ich Embarcadero jedoch einfach mal loben! |
AW: Fragen zu FMX unter Android
Zitat:
|
AW: Fragen zu FMX unter Android
Da reicht eine normale Hello-World App auf einem Galaxy S4.
|
AW: Fragen zu FMX unter Android
Zitat:
Delphi-Quellcode:
hinbekommen.
frmMain.Width := Screen.Size.Width;
frmMain.Height := Screen.Size.Height; Gruß |
AW: Fragen zu FMX unter Android
Im Event "BecameActive" hast Du frmMain.Width := Screen.Size.Width; / frmMain.Height := Screen.Size.Height; definiert?
Hat leider nichts gebracht. Am einfachsten lässt es sich reproduzieren, in dem man die App in Delphi auf dem Android startet, während dieses Gesperrt ist. Entsperrt man das Handy, nachdem Delphi die App übertragen hat, sieht man nix mehr. Zumindest in den meisten Fällen. Ich verwende nur Komponenten, die ab Werk mit dabei sind, also PageControl, Labels, Buttons, Images. |
AW: Fragen zu FMX unter Android
Den Punkt "Gerät sperren/entsperren" kann ich von der Liste streichen, war ein Design-Fehler: Ich habe bei Android immer eine Form mit Kopf-/Fußzeilen genommen. Die untere Toolbar hat dann jedoch immer die Anchors "Left, Top, Right, Bottom". Wenn das Gerät nun gesperrt und entsperrt wird, scheint sich die Größe der Form zu ändern. Die untere Toolbar passt sich an, ändert sich jedoch anscheinend nicht mehr zurück und ist plötzlich bildschirmfüllend. Einfach den Anchor "Top" als false gesetzt und schon klappt es.
Bei den restlichen Punkten bin ich leider noch nicht weiter. |
AW: Fragen zu FMX unter Android
So ein Problem mit sperren/entsperren habe ich auch siehe
![]() |
AW: Fragen zu FMX unter Android
Es gibt doch Unterschiede zwischen XE5 und XE6. In XE6 hat sich wirklich was getan, so hätte es von Anfang an sein müssen.
Es macht schon Spaß zu sehen, wie die Anwendung mit wenig Aufwand mal eben auf einer anderen Plattform läuft; wenn auch teilweise recht langsam. Ich raffe FMX aber noch nicht so richtig. Ich habe eine Anwendung für das Galaxy S4 designed, verwende nur original Labels, Checkboxen usw. mit original Eigenschaften (Style). Ich bin jetzt davon ausgegangen, dass, wenn ich die App auf einem Galaxy Tab laufen lasse, alles gleich aussieht. Während aber auf dem S4 z.B. die hälfte des Bildschirms mit Texten gefüllt wird, braucht derselbe Text auf dem Galaxy Tab nur 1/3, es wird also nicht hochskaliert. Irgendwas übersehe ich. Oder verstehe ich falsch. |
AW: Fragen zu FMX unter Android
Ich glaube nicht, dass eine automatische Skalierung funktioniert, bzw. dass es diese gibt. Wir machen immer zwei Designs, eins für Phone und eins für Tablet.
Meist sieht ein Phone-Design, primär im Hochformat, auf einem Tablet, das gerne im Querformat genutzt wird, schrecklich aus. |
AW: Fragen zu FMX unter Android
Machst Du dafür jedesmal ein neues Projekt? Oder wie habt ihr die verschiedenen Screens voneinander getrennt?
|
AW: Fragen zu FMX unter Android
Alles im einem Projekt. Das Mainformular ist leer. Dann wird beim starten der App geprüft ob Hoch- oder Querformat und ob es eher ein Tablet oder ein Phone ist.
Je nach Ergebnis wird dann der Inhalt von dem entsprechendem Design-Formular geladen. |
AW: Fragen zu FMX unter Android
Ich frage in der DPR Datei ab, ob es sich um ein Tablet oder ein Smartphone handelt und lade dann das entsprechende Formular :
Delphi-Quellcode:
Die Funktion gibt Dir für iOS und Android zurück, ob es sich um ein Tablet oder ein Smartphone handelt.
function IsPad: Boolean;
begin {$IFDEF IOS} Result := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice).userInterfaceIdiom = UIUserInterfaceIdiomPad; {$ENDIF} {$IFDEF ANDROID} Result := (MainActivity.getResources.getConfiguration.screenLayout and TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_MASK) >= TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_LARGE; {$ENDIF} |
AW: Fragen zu FMX unter Android
Also zwei Forms für eine Anwendung. Und wie handelt ihr den Source (was sich hinter "Button1 verbirgt") sowie die verschiedenen Auflösungen eines Pads? TScaledLayout?
TScaledLayout funktioniert zwar, es sieht aber ziemlich gestrecht aus, also irgendwie ... komisch. |
AW: Fragen zu FMX unter Android
Zitat:
|
AW: Fragen zu FMX unter Android
Ach ja ... Muss mich erst dran gewöhnen, dass es die ja jetzt unter FMX gibt.
Und TScaledLayout? |
AW: Fragen zu FMX unter Android
Das habe ich aufgegeben. Wir versuchen die Apps so zu designen, dass Sie auf möglichst vielen Formaten/Auflösungen brauchbar angezeigt werden. Optimiert wird es grundsätzlich für 1024x748 bzw. 1004x768.
|
AW: Fragen zu FMX unter Android
Ok, vielen dank für die Infos, das hilft mir weiter.
|
AW: Fragen zu FMX unter Android
Ich arbeite viel mit Anchors und Align um eine entsprechende Ansicht für die einzelnen Formate hinzubekommen.
|
AW: Fragen zu FMX unter Android
Zitat:
|
AW: Fragen zu FMX unter Android
|
AW: Fragen zu FMX unter Android
Zitat:
Delphi-Quellcode:
{$R *.res}
//////////////////////////////////////////////////////////////////////////////// /// /// To check if the app is running on a Pad /// function IsPad: Boolean; begin {$IFDEF IOS} Result := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice).userInterfaceIdiom = UIUserInterfaceIdiomPad; {$ENDIF} {$IFDEF ANDROID} Result := (MainActivity.getResources.getConfiguration.screenLayout and TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_MASK) >= TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_LARGE; {$ENDIF} end; //////////////////////////////////////////////////////////////////////////////// /// /// Main Program /// begin Application.Initialize; Application.FormFactor.Orientations := [TFormOrientation.Portrait, TFormOrientation.InvertedPortrait, TFormOrientation.Landscape, TFormOrientation.InvertedLandscape]; if IsPad then Application.CreateForm(TPadMainForm, PadMainForm) else Application.CreateForm(TPhoneMainForm, PhoneMainForm); Application.Run; end. |
AW: Fragen zu FMX unter Android
Die Form-Vererbung... Man, da hätte ich auch selbst drauf kommen können. :oops:
Vielen Dank, klappt super! |
AW: Fragen zu FMX unter Android
Kleine Frage: Ich habe in der Quell-Form ein TScaledLayout, dessen Column[0] ich in einer abgeleiteten Form vergrößern möchte. Beim Start bekomme ich jedoch dann den Fehler
Code:
Ich habe jedoch nur die Größe im Designer geändert und die Original-Form läuft ...
Exception EReadError in Modul xxx.exe bei 000C1EE0.
Fehler beim Lesen von gridPanel.ColumnCollection: Eine Spalte, die Steuerelemente enthält, kann nicht gelöscht werden. |
AW: Fragen zu FMX unter Android
Warum dieses TScaledLayout ? Versuche mal die Komponenten nur mit Align und Anchors entsprechend zu Positionieren und Auszurichten. Habe damit bis jetzt keine Probleme gehabt.
|
AW: Fragen zu FMX unter Android
Ich verwend Checkboxen und wenn sich die Auflösung massiv ändert, dann ändert sich die Größe von den Teilen nicht. Außer halt bei TScaled.
|
AW: Fragen zu FMX unter Android
Sei mir net bös, aber warum Checkboxen. Ich habe bis jetzt noch keine Checkboxen in einer App gesehen. Dafür würde ich eher TSwitch nutzen.
|
AW: Fragen zu FMX unter Android
Steht so im Pflichtenheft :(
|
AW: Fragen zu FMX unter Android
Hat jemand eine Idee, wie ich zwischen den verschiedenen Größen unterscheide? Android Tablets gibt es ja von ... bis.
Ich kann ja im Designer verschiedene Tablets auswählen ("Google Nexus") usw. und alles darauf anpassen. Aber wie entscheide ich beim Start, welche der angepassten Forms geladen werden? Aktuell kann ich nach den Sourcen meiner Vorgänger nur zwischen Handy und Tablet unterscheiden. |
AW: Fragen zu FMX unter Android
Frage selbst beantwortet, funktioniert in fast allen Fällen.
Code:
uses ... FMX.Platform.Android, Androidapi.JNI.GraphicsContentViewText, FMX.Helpers.Android, ... function IsTabletNormal: Boolean; // z.B. Handy begin Result := (MainActivity.getResources.getConfiguration.screenLayout and TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_MASK) >= TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_NORMAL; end; function IsTabletLarge: Boolean; // z.B. 7" Nexus begin Result := (MainActivity.getResources.getConfiguration.screenLayout and TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_MASK) >= TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_LARGE; end; function IsTabletXLarge: Boolean; // z.B. 10" Nexus begin Result := (MainActivity.getResources.getConfiguration.screenLayout and TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_MASK) >= TJConfiguration.JavaClass.SCREENLAYOUT_SIZE_XLARGE; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz