10 Aspekte, die Sie bei der Implementierung von Edge-to-Edge-Designs in Android beachten sollten

Maximieren Sie den Bildschirmraum Ihrer Android-Apps mit Edge-to-Edge-Designs, die die Grenzen der Anzeige sprengen.


10 Aspekte, die Sie bei der Implementierung von Edge-to-Edge-Designs in Android beachten sollten

 

  1. Aktivierung des Edge-to-Edge Designs in Android
  2. Erstellung von zweigeteilten Layouts in Edge-to-Edge Designs in Android
  3. Querformat-Ausrichtung für Edge-to-Edge-Designs in Android
  4. WindowInsets consume API in Edge-to-Edge Designs in Android
  5. LazyColumn / LazyRow mit consumed WindowInsets in Edge-to-Edge Designs in Android
  6. Wie man verhindert, dass Listenelemente die Statusleiste in Edge-to-Edge-Designs überdecken
  7. Optimierung des mittig zweigeteilten Layouts in Edge-to-Edge-Designs
  8. Erstellung von zweiteiligen Layouts mit Animationen für Edge-to-Edge-Designs
  9. Integration von WindowInsets in Compose-Komponenten für Edge-to-Edge-Designs
  10. Simulation realistischer Edge-to-Edge-Designs mit der Compose-Vorschau für WindowInsets

 

Die Präsentation von Inhalten auf dem Bildschirm hat einen tiefgreifenden Einfluss auf die Nutzererfahrung. Edge-to-Edge-Designs sind dabei besonders wichtig, da sie den Bildschirmraum maximal nutzen und eine visuell beeindruckende Schnittstelle schaffen, die Inhalte nahtlos bis an die äußersten Ränder des Displays erstreckt. Jetpack Compose ist Googles modernes Toolkit für die Entwicklung von Android-Benutzeroberflächen. Es bietet eine agile und intuitive Möglichkeit, solche Designs umzusetzen. Mit seiner deklarativen Programmierweise können Entwickler dynamische UIs erstellen, die sich automatisch an verschiedene Geräte und Bildschirmorientierungen anpassen.

Die Herausforderung besteht darin, nicht nur den visuellen Rahmen zu erweitern, sondern auch die Interaktion mit den Systemleisten, wie der Status- und Navigationsleiste, geschickt zu handhaben. Entwickler können diese Herausforderungen durch den strategischen Einsatz der WindowInsets API bewältigen. Dadurch wird sichergestellt, dass Inhalte und Navigationselemente harmonisch innerhalb des verfügbaren Raums angeordnet werden, ohne von den Systemleisten verdeckt zu werden. Für eine konsistente Darstellung auf verschiedenen Geräten ist ein tiefes Verständnis der API und eine sorgfältige Layout-Planung erforderlich.

Dieser Artikel gibt einen Einblick in die praktische Umsetzung von Edge-to-Edge-Designs mit Jetpack Compose und zeigt anhand konkreter Beispiele, wie Entwickler diese Technik nutzen können, um moderne und ansprechende Anwendungen zu erstellen. Es werden konkrete Beispiele gezeigt, von der Aktivierung des Edge-to-Edge-Modus in der Aktivität bis hin zur Feinabstimmung des Layouts für unterschiedliche Bildschirmkonfigurationen. Die folgenden Abschnitte bieten wertvolle Einblicke und Lösungsansätze für gängige Probleme.


Transformieren Sie Ihre mobile UI mit Edge-to-Edge-Designs


Das Nutzererlebnis ist entscheidend für den Erfolg einer mobilen Anwendung. Edge-to-Edge-Designs spielen dabei eine Schlüsselrolle. Diese Designs nutzen den gesamten Bildschirm, um eine eindrucksvolle und immersive Benutzererfahrung zu bieten, bei der die Grenzen zwischen Anwendung und Hardware verschwimmen.

Edge-to-Edge-Design bedeutet, dass Sie hinter der Systemstatusleiste und der Navigationsleiste zeichnen sollten sowie auf anderen System-UI-Elementen oder Bereichen, die durch eine Kamera verdeckt werden (Display Cutouts). (https://developer.android.com/develop/ui/views/layout/edge-to-edge). Leider unterstützt das Vorschausystem in Android Studio nicht die Anzeige von Systemleisten oder Display Cutouts, was die Entwicklung solcher Designs erschwert. Um das Problem zu lösen, wurde spezieller Code entwickelt, der WindowInsets in die Jetpack Compose-Vorschau integriert. Dadurch erhalten Entwickler ein realitätsnahes Feedback darüber, wie ihre Anwendung unter Berücksichtigung von Statusleisten, Navigationsleisten und Kameraaussparungen aussehen wird.

Edge-to-Edge-Designs effektiv umsetzen mit Jetpack Compose

Edge-to-Edge-Designs maximieren den verfügbaren Bildschirmbereich für die App-Inhalte und fügen sich nahtlos in die Systemleisten ein. Dadurch entsteht eine eindrucksvolle und immersive Nutzererfahrung. Jetpack Compose, das moderne Toolkit für Android-UIs, ermöglicht eine flexible und reaktionsschnelle Gestaltung solcher Benutzeroberflächen, die sich an unterschiedliche Gerätekonfigurationen anpassen. Es bietet einen deklarativen Ansatz, mit dem Entwickler UI-Komponenten dynamisch definieren und anpassen können.

Durch die Verwendung der WindowInsets API in Jetpack Compose können Entwickler die Herausforderungen des Edge-to-Edge-Designs meistern, indem sie Inhalte um Systemleisten wie Status- und Navigationsleisten anordnen (https://developer.android.com/jetpack/compose/layouts/insets). Sorgfältige Planung und fundiertes Verständnis der API sind dabei unerlässlich, um sicherzustellen, dass Apps auf verschiedenen Geräten konsistent und ansprechend aussehen.

Jetpack Compose vereinfacht die Entwicklung von Edge-to-Edge-Designs erheblich und unterstützt Entwickler dabei, moderne und visuell ansprechende Apps zu erstellen, die den aktuellen Design-Trends und Nutzererwartungen entsprechen.

Die Implementierung eines Edge-to-Edge-Designs erhöht jedoch die Komplexität der Benutzeroberfläche erheblich. Die folgenden Beispiele veranschaulichen dies.

Aspekt 1: Aktivierung des Edge-to-Edge Designs in Android

Die Implementierung eines Edge-to-Edge-Designs in Ihrer Android-Anwendung beginnt mit der Aktivierung in der Activity. Dadurch kann Ihre App Inhalte über den gesamten Bildschirmbereich darstellen, einschließlich der Bereiche hinter den Systemleisten wie der Status- und Navigationsleiste. Hier ist ein kurzes Beispiel, wie dies in Ihrer MainActivity aussehen könnte:

 

class MainActivity : ComponentActivity() { 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        
        enableEdgeToEdge() 
        
        setContent { 
            //... 
        } 
    } 
} 

Beispiel für einen vereinfachten Compose-Code:

 

@Composable 
fun MainLayout() { 
    Column { 
        LazyColumn( 
            modifier = Modifier 
                .fillMaxWidth() 
                .weight(1f) 
        ) { 
            // list content items 
        } 
        AppNavigationBar() 
    } 
} 

 

Nach der Aktivierung müssen Sie Ihr UI-Design anpassen, um sicherzustellen, dass wichtige Inhalte und Bedienelemente nicht von den Systemleisten verdeckt werden. Ein typisches Szenario hierfür ist eine Anwendung mit einer scrollbaren Liste und einer Navigationsleiste.

Durch die Anwendung des Modifiers windowInsetsPadding auf das umschließende Column-Layout werden die Inhalte so angepasst, dass sie weder hinter die Systemleisten rutschen noch am Bildschirmrand abgeschnitten werden. Diese Anpassung stellt sicher, dass alle UI-Elemente vollständig sichtbar und zugänglich sind.

 

@Composable 
fun MainLayout() { 
--  Column { 
++  Column( 
++      Modifier.windowInsetsPadding(WindowInsets.safeDrawing) 
++  ) { 
        LazyColumn( 
            modifier = Modifier 
                .fillMaxWidth() 
                .weight(1f) 
        ) { 
            // list content items 
        } 
        AppNavigationBar() 
    } 
} 

Das Problem mit den überlappenden Systemleisten wurde behoben. Allerdings gibt es immer noch einige ästhetische Probleme mit der LazyColumn-Liste. Der scrollende Inhalt wird am oberen Bildschirmrand abgeschnitten und der Hintergrund der App-Navigationsleiste erreicht nicht den unteren Bildschirmrand.
 

Aspekt 2: Erstellung von zweigeteilten Layouts in Edge-to-Edge Designs in Android

Die Optimierung des Layouts für Edge-to-Edge-Designs erfordert den Einsatz von Padding innerhalb der einzelnen UI-Komponenten. Eine pauschale Anwendung von Padding auf den gesamten Inhalt kann zu unerwünschten Effekten führen, wie beispielsweise einem inkonsistenten Erscheinungsbild des Inhalts Ihrer Anwendung. Ein gezielterer Ansatz ermöglicht es, die Vorteile des Edge-to-Edge-Designs voll auszuschöpfen, ohne die Benutzererfahrung zu beeinträchtigen.

Implementieren Sie dies in Ihrem Jetpack Compose Code wie folgt:

 

@Composable 
fun MainLayout() { 
    Column { 
        val contentPadding = WindowInsets.safeDrawing.asPaddingValues() 
        LazyColumn( 
            modifier = Modifier 
                .fillMaxWidth() 
                .weight(1f), 
            contentPadding = contentPadding 
        ) { 
            // list content items 
        } 
        AppNavigationBar( 
            Modifier.windowInsetsPadding(WindowInsets.safeDrawing) 
        ) 
    } 
} 

Bei einem Layout mit einer Liste (z.B. LazyColumn) und einer Navigationsleiste (z.B. AppNavigationBar) ist es wichtig, dass das Padding für die WindowInsets nicht auf alle Seiten angewendet wird. Beispielsweise sollte die LazyColumn nur das obere Padding berücksichtigen, da sie sich nicht am unteren Bildschirmrand befindet. Dadurch wird ein unnötiger Abstand zur unteren Navigationsleiste verhindert. Ebenso sollte die Navigationsleiste nur am unteren Rand ein Padding erhalten, damit der Abstand zum Hauptinhalt nicht zu groß wird.

Durch die Verwendung von WindowInsets.safeDrawing.only(WindowInsetsSides.Top) für die LazyColumn und WindowInsets.safeDrawing.only(WindowInsetsSides.Bottom) für die AppNavigationBar wird sichergestellt, dass jedes UI-Element abhängig von seiner Position auf dem Bildschirm das richtige Padding erhält, ohne dass wichtige Inhalte durch die Systemleisten überdeckt werden oder zu große Abstände entstehen.

Der folgende Code löst dieses Problem:

 

val listContentPadding = WindowInsets.safeDrawing 
    .only(WindowInsetsSides.Top) 
    .asPaddingValues() 
LazyColumn( 
    modifier = Modifier 
        .fillMaxWidth() 
        .weight(1f), 
    contentPadding = listContentPadding 
) { 
    // list content items 
} 
val navigationBarPadding = WindowInsets.safeDrawing 
    .only(WindowInsetsSides.Bottom) 
    .asPaddingValues() 
AppNavigationBar( 
    Modifier.windowInsetsPadding(navigationBarPadding) 
) 

Aspekt 3: Querformat-Ausrichtung für Edge-to-Edge-Designs in Android

Während Anpassungen für das Hochformat während des Entwicklungsprozesses häufig berücksichtigt werden, stellt das Querformat spezifische Herausforderungen, insbesondere bei der Verwendung von Edge-to-Edge-Designs. Hier ist ein Beispiel für ein Design im Querformat mit einer Navigationsleiste am linken Rand neben dem Listeninhalt.

Im Querformat ist es wichtig, dass die Navigationsleiste und Listenkomponenten (wie z.B. eine LazyColumn) nicht nur am oberen und unteren Rand, sondern auch an den Seitenrändern über ausreichend Padding verfügen. Dadurch wird sichergestellt, dass die Benutzeroberfläche nicht durch Systemleisten verdeckt wird und wichtige Inhalte immer vollständig sichtbar sind. Bei der Gestennavigation ist zu beachtet, dass am unteren Rand zusätzliches Padding benötigt wird, um eine überlappungsfreie Interaktion zu ermöglichen.
 

Aspekt 4: WindowInsets consume API in Edge-to-Edge Designs in Android

Die Verwendung der Funktion Modifiers.consumeWindowInsets(...) in Jetpack Compose bietet die Möglichkeit WindowInsets innerhalb Ihres Layout-Codes zu verwalten. Insets von Teilelementen können auf die relevanten Seiten beschränkt werden. Die Teil-UI-Elemente innerhalb des Layouts müssen nicht mehr unterscheiden an welcher Position auf dem Bildschirm sie sich befinden.

Ein praktisches Beispiel für die Anwendung dieser Methode ist die Erstellung eines vertikal geteilten Layouts. Dabei verbraucht das Layout den rechten Inset für das linke Teil-Element und den linken Inset für das rechte Teil-Element, so dass nur die jeweils relevanten WindowInsets übrigbleiben.

 

@Composable 
fun SplitLayoutVertical( 
    modifier: Modifier = Modifier, 
    windowInsets: WindowInsets = WindowInsets.safeDrawing, 
    first: @Composable RowScope.(Modifier) -> Unit, 
    second: @Composable RowScope.(Modifier) -> Unit 
) { 
    Row(modifier) { 
        val consumedFirst = windowInsets.only(WindowInsetsSides.End) 
        first(Modifier.consumeWindowInsets(consumedFirst)) 
        val consumedSecond = windowInsets.only(WindowInsetsSides.Start) 
        second(Modifier.consumeWindowInsets(consumedSecond)) 
    } 
} 

 

Beachten Sie, dass der direkte Aufruf von WindowInsets.safeDrawing.asPaddingValues() die verwendeten Insets nicht automatisch entfernt. Daher ist es leider notwendig, die Modifier-API zu verwenden. Im Jetpack Compose Issue Tracker wurde dazu ein Eintrag erstellt: issuetracker.google.com/issues/300949347. Bitte geben Sie ein +1, wenn Sie ebenfalls diese Funktionalität benötigen.

Aspekt 5: LazyColumn / LazyRow mit consumed WindowInsets in Edge-to-Edge Designs in Android

Bei LazyColumn und LazyRow kann das Padding für den Inhalt der Liste nicht über einen Modifier angegeben werden, sondern muss über einen PaddingValue übergeben werden.

Damit die verbrauchten Insets trotzdem berücksichtigt werden, kann der Modifier.onConsumedWindowInsetsChanged verwendet werden. Dieser ermöglicht es, auf Änderungen der verbrauchten Insets zu reagieren.

Das folgende Beispiel zeigt ein vertikal geteiltes Layout mit einer Navigationsleiste im ersten Teil und einer scrollbaren Liste im zweiten Teil. Die LazyColumn verwendet den Modifier.onConsumedWindowInsetsChanged um die PaddingValues für den Inhalt zu berechnen.

 

@Composable 
fun MainLayout() { 
    val insets = WindowInsets.safeDrawing 
    SplitLayoutVertical( 
        windowInsets = insets, 
        first = { 
            AppNavigationBar( 
                Modifier.fillMaxHeight() 
                    .windowInsetsPadding(insets) 
            ) 
        }, 
        second = { 
            val density = LocalDensity.current 
            var insetsPadding by remember {  
                mutableStateOf(PaddingValues())  
            } 
            LazyColumn( 
                modifier = Modifier 
                    .onConsumedWindowInsetsChanged { 
                        insetsPadding = insets 
                            .exclude(it) 
                            .asPaddingValues(density) 
                    } 
                    .fillMaxHeight() 
                    .weight(1f), 
                contentPadding = insetsPaddingValues(insets) 
            ) { 
                // list content items 
            } 
        } 
    ) 
} 

Aspekt 6: Wie man verhindert, dass Listenelemente die Statusleiste in Edge-to-Edge-Designs überdecken


Trotz korrekter Implementierung für alle WindowInsets gibt es Probleme mit der Liste, da sie die Statusleiste überlappt. Wenn die Liste hinter die Statusleiste gescrollt wird, ist die Statusleiste nicht mehrlesbar. Auch die untere Navigation des Systems wird unleserlich. Um dies zu vermeiden, kann ein dynamisches Padding verwendet werden, das den Inhalt nahtlos unter den Systemleisten verbirgt.

Aspekt 7: Optimierung des mittig zweigeteilten Layouts in Edge-to-Edge-Designs

Bei der Gestaltung eines zweigeteilten Layouts mit einer Liste und einer Detailansicht sind einige Faktoren zu beachten. Bei dem nachfolgenden Bild haben beide Elemente die gleiche Breite, d.h. die Hälfte des verfügbaren Platzes. Allerdings scheint die Detailansicht weniger verfügbaren Platz zu haben, da die Insets nicht von der Mittelpunktberechnung ausgeschlossen wurden. Dieses Layout könnte für Ihre Zwecke geeignet sein, aber wenn Sie die Insets von der Mittelpunktberechnung ausschließen möchten, wird der Code komplizierter.

Aspekt 8: Erstellung von zweiteiligen Layouts mit Animationen für Edge-to-Edge-Designs

Eine weitere Herausforderung kann entstehen, wenn Sie mit einem dynamischen Layout arbeiten, das die Möglichkeit bietet, eine Seite zu entfernen. Der Prozess des Ein- und Ausschiebens einer Seite mit einer Animation kann sogar noch komplizierter sein, da er die Berechnung der verbrauchten Insets auf der Grundlage der tatsächlichen Größe der beiden Komponenten erfordert.

Die Komponente 'Elementliste' in der Abbildung reicht bis zum unteren Bildschirmrand, das WindowInset enthält jedoch nicht die Systemnavigationsleiste. Das sichtbare Padding stammt aus der gleitenden Detailansicht. Daher ist es notwendig den rechten Teil des WindowInsets während der Animation zu berechnen. Ein Beispiel hierfür ist unten dargestellt. Beachten Sie, dass wir unsere eigenen Layout-Manager entwickeln müssen und daher nicht die von Compose zur Verfügung gestellten Layout-Manager verwenden können.

Aspekt 9: Integration von WindowInsets in Compose-Komponenten für Edge-to-Edge-Designs

Einige der offiziellen Material3-Komponenten unterstützen WindowInsets, wie beispielsweise die TopAppBar, BottomAppBar und NavigationRail. (https://developer.android.com/jetpack/compose/layouts/insets#material3-components). Diese Komponenten sind jedoch für bestimmte Positionen auf dem Bildschirm vorgesehen. Um ein korrektes Padding zu gewährleisten, sollte die TopAppBar immer oben positioniert werden. Der Scaffold-Layoutmanager verwaltet die WindowInsets, aber die Anwendung der Insets muss manuell erfolgen, wie im Beispielcode in der offiziellen Android-Dokumentation gezeigt wird. Standardmäßig wird im Code WindowInsets.systemBars verwendet. Es kann jedoch geändert werden, um WindowInsets.safeDrawing zu verwenden, welches auch Paddings für Kameras und ähnliches enthält.

 

Scaffold( 
    contentWindowInsets = WindowInsets.safeDrawing, 
    content = { innerPadding -> 
        LazyColumn( 
            // consume insets as scaffold doesn't do it by default 
            modifier = Modifier.consumeWindowInsets(innerPadding), 
            contentPadding = innerPadding 
        ) { 
            // list items 
        } 
    } 
) 

 

Die Umsetzung von Edge-to-Edge-Designs ist aufgrund der Vielfalt der Gerätekonfigurationen und der Notwendigkeit einer konsistenten Darstellung auf allen Bildschirmgrößen und Bildschirmausrichtungen zu gewährleisten, eine Herausforderung. Dieser Artikel soll das Bewusstsein für die Komplexität dieser Aufgabe schärfen, bietet jedoch keine umfassende Lösung. 

Die Verwendung der Compose-Preview hilft dabei, den Überblick über die Anzeige von Anwendungen auf verschiedenen Gerätekonfigurationen zu behalten und sicherzustellen, dass sie unter verschiedenen Bedingungen wie erwartet funktionieren. Android Studio bietet derzeit keine Unterstützung für WindowInsets in der Compose-Preview. Es wurde aber ein Feature Request beim Jetpack Compose Issue Tracker eingereicht: https://issuetracker.google.com/issues/316195049.

Aspekt 10: Simulation realistischer Edge-to-Edge-Designs mit der Compose-Vorschau für WindowInsets

Die Integration von WindowInsets in die Compose-Vorschau vereinfacht und optimiert die Entwicklung von Edge-to-Edge-Designs in Android-Anwendungen. Hierfür wurde eine Bibliothek entwickelt, die es ermöglicht, die Darstellung von Systemstatusleisten, Navigationsleisten und Kameraaussparungen innerhalb der Compose-Preview zu emulieren. Dieser Ansatz umgeht die Einschränkungen der standardmäßig versteckten und statischen WindowInsets-API durch einen Hack. Dadurch wird eine realitätsnahe Vorschau des Verhaltens der Anwendung unter verschiedenen Bedingungen ermöglicht.

Der Code für diesen Hack ist unter https://github.com/timo-drick/compose_libraries/blob/main/edge_to_edge_preview_lib/src/main/java/de/drick/compose/edgetoedgepreviewlib/insets_injector.kt zu finden.

Um die Bibliothek zu verwenden, fügen Sie einfach die folgende Abhängigkeit hinzu:

 

dependencies { 
    implementation("de.drick.compose:edge-to-edge-preview:0.2.0") 
} 

 

Durch die Verwendung des EdgeToEdgeTemplate in Ihren Compose-Vorschauen können Sie verschiedene Bildschirmkonfigurationen simulieren. Dies beinhaltet die Darstellung von Navigations- und Statusleisten sowie Kameraaussparungen. Dadurch erhalten Sie eine detaillierte und akkurate Vorschau, wie Ihre Anwendung auf realen Geräten aussehen wird.

 

@Preview 
@Composable 
fun PreviewEdgeToEdge() { 
    EdgeToEdgeTemplate( 
        navMode = NavigationMode.ThreeButton, 
        cameraCutoutMode = CameraCutoutMode.Middle, 
        showInsetsBorder = true, 
        isStatusBarVisible = true, 
        isNavigationBarVisible = true, 
        isInvertedOrientation = false 
    ) { 
        //Your MainAppComposable() 
        //... 
    } 
} 

 

Hier ist ein Beispiel, das zeigt, wie man in Android Studio mehrere Konfigurationen in der Vorschau anzeigen kann:

Dieser Ansatz ermöglicht eine realistische Darstellung von UI-Komponenten in Bezug auf die verschiedene Bildschirm Ausrichtungen und Geräte Konfigurationen. Entwickler können somit fundierte Designentscheidungen treffen und dadurch die Benutzererfahrung ihrer Anwendungen deutlich verbessern.
 

Fazit: Meistern Sie die Herausforderungen von Edge-to-Edge-Designs in Android

Edge-to-Edge-Designs sind ein Schlüsselelement, um eine beeindruckende und immersive Nutzererfahrung zu bieten. Sie nutzen den verfügbaren Bildschirmplatz maximal aus und lassen die Grenzen zwischen Anwendung und Hardware verschwimmen. Die Qualität mobiler Anwendungen beeinflusst maßgeblich das Nutzererlebnis und den Erfolg der Anwendung. Jetpack Compose, das moderne Toolkit von Google für Android-Entwickler, vereinfacht und beschleunigt die Implementierung von Designs. Dieser Artikel verdeutlicht durch praktische Beispiele, wie Sie diese Designs effektiv umsetzen können.

Um Ihre App zu bereichern und den Erwartungen Ihrer Nutzer gerecht zu werden, stehen Ihnen mit Jetpack Compose zahlreiche moderne UI-Komponenten zur Verfügung. Die spezialisierte API für WindowInsets und die Unterstützung der Material3-Komponenten sind erst der Anfang. Die Herausforderungen bei der Implementierung von Edge-to-Edge-Designs sind zwar nicht zu unterschätzen, können aber mit den richtigen Techniken und einem tiefen Verständnis der verfügbaren Werkzeuge erfolgreich gemeistert werden.

Wenn Sie Ihre Android-Apps verbessern und ein immersives Nutzererlebnis schaffen möchten, ist jetzt der ideale Zeitpunkt, um Jetpack Compose in Ihre Entwicklungsarbeit zu integrieren. Unsere Experten unterstützen Sie bei jedem Schritt und sorgen dafür, dass Ihre Anwendungen nicht nur visuell ansprechend, sondern auch funktional überzeugend sind.

Machen Sie jetzt den ersten Schritt in Richtung zukunftsweisender App-Entwicklung mit Edge-to-Edge-Designs. Kontaktieren Sie uns für eine Beratung oder weitere Informationen zu unseren Dienstleistungen im Bereich der App-Entwicklung.

Wenn Sie zusätzliche Funktionen benötigen, wie z. B. Unterstützung für IME oder faltbare Geräte, reichen Sie bitte einen Feature-Request ein oder fügen Sie diese selbst hinzu: https://github.com/timo-drick/compose_libraries/tree/main/edge_to_edge_preview_lib

Haben Sie Fragen zu Edge-to-Edge-Designs?
Kontaktieren Sie uns!

Wir sind Ihr zuverlässiger Partner für IT-Dienstleistungen. Unser erfahrenes Team steht Ihnen zur Seite, um Ihre Anforderungen zu erfüllen und Ihre Ziele zu erreichen.

Weitere Themen für Sie