fix(android): Handy-Layout im Now-Playing unangetastet lassen
Nachtrag zu 6248329: zwei der Aenderungen hatten doch Wirkung auf gewoehnliche Handys.
1. Senkrechte Zentrierung galt fuer alle Anzeigen und verschob den Block auf einem hohen
Handy um etwa 60 dp nach unten. Jetzt wird nur zentriert, wenn eine der neuen Grenzen
wirklich greift (Hoehe oder 400-dp-Deckel); solange die Breite das engste Mass ist,
bleibt es beim alten Aufbau samt 28 dp Abstand oben.
2. Die Schwelle fuer die kompakte Kopfzeile lag bei 400 dp und erfasste damit jedes
uebliche Handy. Jetzt 356 dp oder kurze Anzeige — also Fold-Deckel und
Flip-Frontdisplay, nicht aber ein 360- oder 384-dp-Handy.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
624832959d
commit
7cdcc352d6
2 files changed
+29
-10
No files matched your search
+9
-3
@@ -105,9 +105,15 @@ Die Android-App zählt eigenständig weiter (mehrere APKs pro Release). Welche d
|
|||||||
Inhalt ist mindestens so hoch wie die Seite — passt er, wird er zentriert; passt er nicht,
|
Inhalt ist mindestens so hoch wie die Seite — passt er, wird er zentriert; passt er nicht,
|
||||||
wächst er darüber hinaus und der Rollbereich hat etwas zu rollen. Die Wischgeste zum Schließen
|
wächst er darüber hinaus und der Rollbereich hat etwas zu rollen. Die Wischgeste zum Schließen
|
||||||
bleibt erhalten, weil ein Rollbereich ohne Weg die Geste nicht verbraucht.
|
bleibt erhalten, weil ein Rollbereich ohne Weg die Geste nicht verbraucht.
|
||||||
- Entschieden wird nach **Maßen, nicht nach Gerätenamen**: `schmal` unter 400 dp Breite,
|
- Entschieden wird nach **Maßen, nicht nach Gerätenamen**: `kurz` unter 560 dp Höhe,
|
||||||
`kurz` unter 560 dp Höhe. Damit greift es auf Fold zugeklappt, Flip-Frontdisplay, Tablet,
|
`schmal` unter 356 dp Breite (oder kurz). Damit greift es auf Fold zugeklappt,
|
||||||
Querformat und geteiltem Bildschirm gleichermaßen.
|
Flip-Frontdisplay, Tablet, Querformat und geteiltem Bildschirm gleichermaßen.
|
||||||
|
- **Auf einem gewöhnlichen Handy ändert sich nichts.** Die Schwellen liegen bewusst außerhalb
|
||||||
|
dessen, was Handys im Hochformat messen (360–448 dp breit, 700 dp und mehr hoch): dort ist
|
||||||
|
weiterhin die Breite das engste Maß, das Cover also exakt so groß wie bisher, der Aufbau
|
||||||
|
oben beginnend mit 28 dp Abstand und die Kopfzeile unverändert. Senkrecht zentriert wird
|
||||||
|
nur, wenn eine der neuen Grenzen wirklich greift. Der Rollbereich liegt auf jeder Anzeige
|
||||||
|
darunter, hat aber bei passendem Inhalt den Weg null und verhält sich wie keiner.
|
||||||
|
|
||||||
## [3.2] — 2026-10-01
|
## [3.2] — 2026-10-01
|
||||||
|
|
||||||
|
|||||||
@@ -192,7 +192,11 @@ fun NowPlayingScreen(
|
|||||||
// Zwei Groessenfragen entscheiden das Layout, nicht ein Geraetename:
|
// Zwei Groessenfragen entscheiden das Layout, nicht ein Geraetename:
|
||||||
// schmal — passt die Kopfzeile mit drei Reitern noch in voller Groesse? (Flip-Deckel)
|
// schmal — passt die Kopfzeile mit drei Reitern noch in voller Groesse? (Flip-Deckel)
|
||||||
// kurz — bleibt nach Kopfzeile und Raendern ueberhaupt Platz? (Flip-Deckel, Querformat)
|
// kurz — bleibt nach Kopfzeile und Raendern ueberhaupt Platz? (Flip-Deckel, Querformat)
|
||||||
val schmal = maxWidth < 400.dp
|
// Die Schwelle liegt bewusst UNTER 360 dp: 360 ist noch ein gewoehnliches Handy und
|
||||||
|
// soll die Kopfzeile unveraendert behalten. Erfasst werden damit der Deckel eines Fold
|
||||||
|
// (~352 dp) und — ueber `kurz` — das Frontdisplay eines Flip, das bei aehnlicher Breite
|
||||||
|
// nur ein Drittel der Hoehe hat und wo drei Reiter in voller Groesse nicht hinpassen.
|
||||||
|
val schmal = maxWidth < 356.dp || maxHeight < 560.dp
|
||||||
val kurz = maxHeight < 560.dp
|
val kurz = maxHeight < 560.dp
|
||||||
val obenPad = if (kurz) maxOf(statusBarTop + 4.dp, 20.dp) else topPad
|
val obenPad = if (kurz) maxOf(statusBarTop + 4.dp, 20.dp) else topPad
|
||||||
Column(
|
Column(
|
||||||
@@ -317,20 +321,29 @@ fun NowPlayingScreen(
|
|||||||
// aeusseren Messrahmens nicht mehr erreichbar (Compose sperrt gleich markierte
|
// aeusseren Messrahmens nicht mehr erreichbar (Compose sperrt gleich markierte
|
||||||
// Layout-Bereiche gegeneinander ab).
|
// Layout-Bereiche gegeneinander ab).
|
||||||
val seitenHoehe = maxHeight
|
val seitenHoehe = maxHeight
|
||||||
|
// Greift ueberhaupt eine der neuen Grenzen? Nur dann weicht das Layout von dem
|
||||||
|
// ab, was ein hohes Handy bisher zeigte. Solange die BREITE das engste Mass ist
|
||||||
|
// — also auf jedem gewoehnlichen Handy —, bleibt es beim alten Aufbau: oben
|
||||||
|
// beginnend mit 28 dp Abstand. Erst wenn Hoehe oder Obergrenze beissen (Fold
|
||||||
|
// aufgeklappt, Tablet, Querformat), wird senkrecht zentriert; oben klebend mit
|
||||||
|
// einem Loch darunter saehe dort falsch aus.
|
||||||
|
val gedeckelt = coverKante < maxWidth - 48.dp || kurz
|
||||||
|
|
||||||
// Passt es, wird zentriert; passt es nicht, wird gescrollt. Beides mit einem
|
// Passt es, wird es angeordnet wie oben beschrieben; passt es nicht, wird
|
||||||
// Aufbau: der Inhalt ist mindestens so hoch wie die Seite (dann greift
|
// gescrollt. Beides mit einem Aufbau: der Inhalt ist mindestens so hoch wie die
|
||||||
// Arrangement.Center), darf aber darueber hinauswachsen — dann hat der
|
// Seite, darf aber darueber hinauswachsen — dann hat der Rollbereich etwas zu
|
||||||
// Rollbereich etwas zu rollen. Auf dem Frontdisplay eines Flip bleibt sonst
|
// rollen. Auf dem Frontdisplay eines Flip bleibt sonst nichts uebrig, was ohne
|
||||||
// nichts uebrig, was ohne Abschneiden darstellbar waere.
|
// Abschneiden darstellbar waere. Passt alles, ist der Rollweg null: dann
|
||||||
|
// verhaelt sich die Seite wie ohne Rollbereich.
|
||||||
// Die Wischgeste zum Schliessen bleibt erhalten: ein Rollbereich ohne Weg
|
// Die Wischgeste zum Schliessen bleibt erhalten: ein Rollbereich ohne Weg
|
||||||
// verbraucht die Geste nicht, sie erreicht also weiter die Seite darunter.
|
// verbraucht die Geste nicht, sie erreicht also weiter die Seite darunter.
|
||||||
Box(Modifier.fillMaxSize().verticalScroll(rememberScrollState())) {
|
Box(Modifier.fillMaxSize().verticalScroll(rememberScrollState())) {
|
||||||
Column(
|
Column(
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
verticalArrangement = Arrangement.Center,
|
verticalArrangement = if (gedeckelt) Arrangement.Center else Arrangement.Top,
|
||||||
modifier = Modifier.fillMaxWidth().heightIn(min = seitenHoehe),
|
modifier = Modifier.fillMaxWidth().heightIn(min = seitenHoehe),
|
||||||
) {
|
) {
|
||||||
|
if (!gedeckelt) Spacer(Modifier.height(28.dp))
|
||||||
// Cover art — gedeckelt, scale-animates like Apple Music
|
// Cover art — gedeckelt, scale-animates like Apple Music
|
||||||
AsyncImage(
|
AsyncImage(
|
||||||
model = coverUrl,
|
model = coverUrl,
|
||||||
|
|||||||
Reference in new issue
Block a user