Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Darkmode auf Android&IOS wie geht ihr damit um? (https://www.delphipraxis.net/203999-darkmode-auf-android-ios-wie-geht-ihr-damit-um.html)

QuickAndDirty 14. Apr 2020 10:15

Darkmode auf Android&IOS wie geht ihr damit um?
 
Hallo
seit IOS 13.4 bekomme ich Meldungen von Nutzern das die App Fehler macht und nichts mehr anzeigt...

Die Nutzer haben beim Erststart von IOS 13.4 den Darkmode ausgewählt.
-Alle TText GUI Objekte bleiben schwarz und werden nicht durch automatisch invertiert
>Daher habe ich TText durch TLabel ersetzt. TLabel wird im Darkmode mit weißer Schrift angezeigt. Ich weiß nicht wer diese Anpassung vornimmt FMX oder IOS.

-Alle Icons die ich verwenden sind gehalten in Schwarz auf einem Alphakanal Hintergrund und liegen in Timagelist. Werden auch quasi immer in einem TGylph angezeigt.
??? Wie kann ich die Bilder invertiert bekommen, in dem Moment wo der Darkmode an ist ???
??? Wie macht ihr das ???

Wie kann ich in Android den Darkmode feststellen?
Wie kann ich in IOS den Darkmode feststellen?

QuickAndDirty 14. Apr 2020 11:27

AW: Darkmode auf Android&IOS wie geht ihr damit um?
 
Also Ich kann Bilderlisten im on create der Form bearbeiten(wenn ich vorher wüsste ob Darkmode gerade aktiv ist.
Delphi-Quellcode:
var aCanvas:TCanvas;
    i,j :Integer;
begin
  for i:= 0 to BilderlisteGruppenUndPersonen.Source.count-1 do
  Begin
    For j:= 0 to BilderlisteGruppenUndPersonen.Source.Items[i].MultiResBitmap.Count-1  do
    Begin
      aCanvas := BilderlisteGruppenUndPersonen.Source.Items[i].MultiResBitmap.Items[j].Bitmap.Canvas;

      aCanvas.BeginScene;
      aCanvas.Bitmap.InvertAlpha;
      aCanvas.EndScene;

    End;
Leider tauscht InvertAlpha einfach nur Farbpixel zu Alphapixeln und Alphapixel zu Farbpixeln.
Ich bräuchte eine logische Operation die XOR mit einem dem Bild selbst ausführt oder eine NOT Operation für Farbpixel.
Gibt es das?

EDIT:
so komme ich weiter!
Delphi-Quellcode:
var aCanvas:TCanvas;
    i,j :Integer;
begin
  for i:= 0 to BilderlisteGruppenUndPersonen.Source.count-1 do
  Begin
    For j:= 0 to BilderlisteGruppenUndPersonen.Source.Items[i].MultiResBitmap.Count-1  do
    Begin
      aCanvas := BilderlisteGruppenUndPersonen.Source.Items[i].MultiResBitmap.Items[j].Bitmap.Canvas;
      aCanvas.BeginScene;
      aCanvas.Bitmap.ReplaceOpaqueColor(TAlphaColors.Wheat);
      aCanvas.EndScene;
    End;
  End;
Jetzt nur noch den Darkmode detecten können!
Wie geht das?

Delphi.Narium 14. Apr 2020 11:39

AW: Darkmode auf Android&IOS wie geht ihr damit um?
 
eventuell https://stackoverflow.com/questions/...elphi-ios-apps

QuickAndDirty 14. Apr 2020 12:01

AW: Darkmode auf Android&IOS wie geht ihr damit um?
 
Ja ich hab das jetzt so gemacht wie in dem Link.
Delphi-Quellcode:
Function IsDarkmodeOn:Boolean;
Begin
{$IFDEF WIN32}
  Result := false;
{$ENDIF}
{$IFDEF ANDROID}
  Result := false;
{$ENDIF}
{$IFDEF IOS}
   Result := FMX.Platform.IOS.IsDarkmodeOn;//A.R. selbstgebaute function die bei updates evtl. verschwindet.
{$ENDIF}
end;
Wie bekomme ich in Android raus ob Darkmode oder Darktheme an ist?

Könnte sein das reagieren auf Darktheme in Android erst ab SDK 29 funktioniert....irgendwie komisch.

Delphi.Narium 14. Apr 2020 12:08

AW: Darkmode auf Android&IOS wie geht ihr damit um?
 
Nicht in Delphi aber trotzdem eventuell https://stackoverflow.com/questions/...s-in-dark-mode
https://stackoverflow.com/questions/...legate-mode-ni

Bei Google suchendelphi detect darkmode android

himitsu 14. Apr 2020 12:10

AW: Darkmode auf Android&IOS wie geht ihr damit um?
 
Theoretisch würde ich mal in FMX.Platform.Android reinsehen, aber da wird Embarcadero bestimmt noch nichts eingebaut haben (gucken kann man dennoch, falls doch und nur dort vergessen den Aufruf einzufügen)
Praktisch wirst du die jeweilige Java-API erstmal selbst aufrufen müssen.
https://developer.android.com/guide/...feel/darktheme, ganz am Ende "To check what the current theme is, apps can run code like this"

Und wenn garnichts geht, dann kann man den DarkMode in seiner Anwendung scheinbar auch deaktivieren.


Besonders nett ist auch, dass es ein onConfigurationChanged()-Event gibt.



Wobei
Delphi-Quellcode:
{$IFDEF WIN32} Result := false; {$ENDIF}
ja auch nicht so ganz stimmt, obwohl es dort sehr viel schwieriger wird, da man die Farben schon seit Jahrzehnten komplett frei definieren kann und du sozusagen einige der Farben analysieren müsstest, ob sie für den Menschen "dunkel" aussehn. (z.B. DialogText heller als DialogHintergrund)

QuickAndDirty 14. Apr 2020 12:29

AW: Darkmode auf Android&IOS wie geht ihr damit um?
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1462001)

Ja ich versuche ja möglichst immer erstmal ohne selber denken ans Ziel zu kommen...
Ich kann Java und Delphi aber ich habe wirklich noch nie Javacode selbst in Marshalling (?) funktionen verpackt.

QuickAndDirty 14. Apr 2020 12:36

AW: Darkmode auf Android&IOS wie geht ihr damit um?
 
Zitat:

Zitat von himitsu (Beitrag 1462002)
Theoretisch würde ich mal in FMX.Platform.Android reinsehen, aber da wird Embarcadero bestimmt noch nichts eingebaut haben (gucken kann man dennoch, falls doch und nur dort vergessen den Aufruf einzufügen)

Wäre cool wenn sich da ein Nugget findet. OK. Bisher wirkt sich "Dunkles Design" auch nicht auf die APP aus. Habe aber auch nicht das neuste Android zum testen hier.

Zitat:

Zitat von himitsu (Beitrag 1462002)
Praktisch wirst du die jeweilige Java-API erstmal selbst aufrufen müssen.
https://developer.android.com/guide/...feel/darktheme, ganz am Ende "To check what the current theme is, apps can run code like this"

Ja, das ist für mich nicht so einfach zu bewerkstelligen.

Zitat:

Zitat von himitsu (Beitrag 1462002)
Und wenn garnichts geht, dann kann man den DarkMode in seiner Anwendung scheinbar auch deaktivieren.

Das hört sich nach einem guten failsafe an!

Zitat:

Zitat von himitsu (Beitrag 1462002)
Wobei
Delphi-Quellcode:
{$IFDEF WIN32} Result := false; {$ENDIF}
ja auch nicht so ganz stimmt, obwohl es dort sehr viel schwieriger wird, da man die Farben schon seit Jahrzehnten komplett frei definieren kann und du sozusagen einige der Farben analysieren müsstest, ob sie für den Menschen "dunkel" aussehn. (z.B. DialogText heller als DialogHintergrund)

Lustigerweise, verwendet FMX in Windows bei mir nicht die farben des Windows Darkmodes.
Obwohl ich den darkmode in Windows 10 wie hier beschrieben https://www.cnet.com/how-to/windows-...urn-it-on-now/
aktiviert habe.
Eigentlich ganz angenehm.


Eventuell lässt sich der Darkmode bei Android und Windows emulieren in dem man ihn ermittelt und dann dynamisch einen passenden Style in ein stylebook lädt?

matashen 14. Apr 2020 13:11

AW: Darkmode auf Android&IOS wie geht ihr damit um?
 
Hallo zusammen,

gibts dafür nicht eigentlich die verschiedenen Styles, also wenn ich in der Doku zum Stildesigner grabe dann finde ich das

Stil Designer

und über Stylebooks läßt sich das einbinden bei Delphi 10.3
Stylebooks verwenden

und unter Platform Targets
[ANDROID][DARKSTYLE][DEFINEFONTSTYLES]
das wird da doch sicher nicht zum Spaß dort sein?
Wenn ich das richtig rauslese kann man dadurch die Styles dem Platform Target im Stylebook zuweisen

Aber real ausprobiert hab ich das in einem Projekt noch nicht, bis jetzt bin ich das nur mal durchgegangen. Hab die 10.3 noch nicht so lange.



Gruß Matthias

QuickAndDirty 14. Apr 2020 14:45

AW: Darkmode auf Android&IOS wie geht ihr damit um?
 
Ich glaube wenn ich einen Style im stylebook festlege wird das auf allen platform mein Corporate Design haben...bzw.das von Windows 10 Modern.
Ich weiß das man für unterschiedliche systeme eigene styles hinterlegen kann...aber das habe ich ja ohne stylebook...3 close to native styles.

So wie ich das verstanden habe, vermutest du,
dass ich für alle Permutationen aus Betriebsystem und Hell/Dunkel-Modus einen eigenen Style hinterlegen kann und der wird dann automatisch von FMX im korrekten Kontext angewendet?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz