Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS und Dark Mode (https://www.delphipraxis.net/215322-ios-und-dark-mode.html)

bcvs 13. Jun 2024 09:10

iOS und Dark Mode
 
Hallo zusammen,

wie geht Ihr mit dem Dunkel-Modus auf dem iPhone um?

Ich habe bis jetzt gerne ein weißes TRectangle als Hintergrund benutzt und darauf ein TLabel gelegt. Im Dark Mode ändert sich die Textfarbe des Labes automatisch zu weiß und das Rectangle bleibt weiß. Weiß auf weiß kann man aber schlecht lesen.

Müsste ich da jetzt den Modus (Hell oder dunkel) abfragen und die Farbe des Rectangles anpassen oder gibt es da etwas automatisches?

Oder: Irgendwelche schwarzen Images beleiben im Darkmode schwarz vor schwarzem Hintergrund.
Muss man jetzt passende Images für den Dark Mode mitliefern?

philipp.hofmann 13. Jun 2024 09:52

AW: iOS und Dark Mode
 
Wir haben für uns entschieden, dass wir die Farben in unserer App unter unserer Kontrolle haben wollen. Die App ist daher immer im Dark-Mode unterwegs, unabhängig vom Betriebssystem-Setting. Daher setzen wir für alle Elemente die FontColor bewusst selbst und in den StyledSettings wird FontColor nicht vererbt.

bcvs 13. Jun 2024 11:13

AW: iOS und Dark Mode
 
Ich habe es jetzt anders herum gemacht:

In den Projektoptionen, Versionsinformationen einen Eintrag
UIUserInterfaceStyle = light
hinzugefügt.

Dann bleibt die App immer im Hell-Modus. Schöner wäre es zwar, wenn man das vernünftig anpassen könnte, aber den Aufwand spare ich mir jetzt erst mal.

QuickAndDirty 18. Jun 2024 11:51

AW: iOS und Dark Mode
 
Weil iCh noch nicht auf SVG Icon umgestellt habe führe ich bei "Create" von jeder Form
diese Funktion aus um die Icons zu invertieren. Das ist nur für IOS notwendig

Delphi-Quellcode:
FitColorsToDarkOrLightMode(self);
Delphi-Quellcode:
Function IsDarkmodeOn:Boolean;
Begin
  result := false;
{$IFDEF Framework_FMX}

{$IFDEF MSWINDOWS}
  Result := false;
{$ENDIF MSWINDOWS}
{$IFDEF ANDROID}
  Result := false;
{$ENDIF ANDROID}
{$IFDEF IOS}
  Result := GetUserInterfaceStyle = UIUserInterfaceStyleDark;
{$ENDIF IOS}

{$ENDIF Framework_FMX}
end;

{$IFDEF Framework_FMX}
Function FitColorsToDarkOrLightMode(acomp:TComponent):boolean;
var i:integer;
    currentcomp:tcomponent;
Begin
  Result := IsDarkModeOn;
  If Result then
  Begin
    for i := 0 to acomp.ComponentCount-1 do
    begin
      currentcomp := acomp.Components[i];
      if currentcomp is TImagelist then
        ReplaceOpaqueColorForImagelist(currentcomp as TImagelist,TAlphaColors.White);
    end;
  end;
end;

procedure ReplaceOpaqueColorForImagelist(aImageList:TimageList; aColor:TAlphaColor);
var aCanvas:TCanvas;
    i,j :Integer;
Begin
  for i:= 0 to aImageList.Source.count-1 do
  Begin
    For j:= 0 to aImageList.Source.Items[i].MultiResBitmap.Count-1  do
    Begin
      aCanvas := aImageList.Source.Items[i].MultiResBitmap.Items[j].Bitmap.Canvas;
      aCanvas.BeginScene;
      aCanvas.Bitmap.ReplaceOpaqueColor(aColor);
      aCanvas.EndScene;
    End;
  End;
end;

Procedure SetFontColorForStates(aTextsetting:TTextSettings; aColor:TAlphaColor);
Begin
  aTextSetting.FontColorForState.Focused := aColor;
  aTextSetting.FontColorForState.Hot := aColor;
  aTextSetting.FontColorForState.Pressed := aColor;
  aTextSetting.FontColorForState.Active := aColor;
  aTextSetting.FontColorForState.Normal := aColor;
End;
{$ENDIF Framework_FMX}
SetFontColorForStates hatte ich früher auch mal mit in der Darkmode Anpassung aber das brauche ich jetzt nicht mehr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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