Entrixy — Gestaltungsleitfaden

Ein lebendes Dokument. Hier stehen Kalibrierungen, Rhythmus und Absprachen zur Oberfläche; es wird aktualisiert, sobald etwas entschieden ist.

Inhalt
  1. Symbole — Größen und Kalibrierung
  2. Typography
  3. Rhythmus und Abstände
  4. Farben und Stufen
  5. Controls
  6. Animations
  7. Textregeln
  8. UX-Muster
  9. Was nicht anzurühren ist

1. Symbole — Größen und Kalibrierung

Das Problem

Material-Symbole aus androidx.compose.material.icons.outlined.* haben eine nominale Größe — ein 24×24-Raster —, doch der gezeichnete Teil unterscheidet sich von Symbol zu Symbol. Gib allen schlicht Modifier.size(24.dp), und die einen wirken groß und schwer (Bolt, Delete), die anderen winzig (Contacts, VpnKey). Sie müssen von Hand kalibriert werden.

Die Kalibriermethode

  1. Einen Screenshot des Bildschirms mit den Symbolen in ihren 38-dp-Kreisen machen — unser Landeplatz.
  2. Mit Python, PIL und numpy den Begrenzungsrahmen des gezeichneten Glyphs messen — maximale Breite und Höhe in Pixeln.
  3. Die Formel: new_size = 24 × 52 / measured_px, begrenzt auf [18..28].
  4. Danach im 38-dp-Platz senkrecht und waagerecht zentrieren.

52 px ist der Referenzglyph Fingerprint; alles wird an ihm als Einheit gemessen.

Die resultierende Größenkarte

IconGrößeWhy
Add, Apps, ArrowBack, Close28dpdünne Linien, Glyph von 36–41 px
AutoMode, Bolt, DeleteOutline, Edit, List, Photo, QrCode, Tune, DriveFileRenameOutline26dpmittlere Dichte, Glyph von etwa 47 px
LocationOn24dpdie Kartennadel — nicht anrühren, sie ist Referenz
LocationOff26dpdie durchgestrichene Nadel — nicht anrühren
ContentCopy, MyLocation, PeopleAlt, Wifi, ExpandMore, ExpandLess22dpbreit oder hoch und optisch schwer
Contacts, VpnKey20dpmit inneren Details überladen
Nicht anrühren: LocationOn (24), LocationOff (26), ExpandMore und ExpandLess (22). Das sind die Referenzsymbole: Sie wurden Pixel für Pixel abgestimmt, und die gesamte Kalibrierung misst sich an ihnen.

AutoMode

Wird überall dort verwendet, wo früher Bolt stand — die Schaltfläche „Automatisierung“ auf der Schlüsselkarte, das Abschnittssymbol in den Einstellungen. Größe 26 dp, wie bei Bolt.

Wo die Tabelle im Code liegt

IconsDebugSheet.kt — die Zuordnung iconSizeByName. Der Debug-Bildschirm wird geöffnet aus SettingsScreen mit der Schaltfläche „UI-Symbole (Debug)“: oben eine FlowRow kalibrierter Symbole, unten eine Liste von Namen, Größen und Kontexten.

2. Typografie

Wir nutzen die Standardrollen von Material 3, bewusst auf vier begrenzt:

RoleGröße / ZeilenhöheWo verwendet
titleLarge SemiBold22sp/28spDer Titel des Bottom Sheets („Für den Gast · <Objekt>“)
titleMedium SemiBold16sp/24spRegelüberschriften („Geolokalisierung“, „WLAN“, „Intervall“, „Aktivierung“) und FieldSection-Beschriftungen („Koordinaten“, „Radius“, „Modus“, „Gespeicherte Netze“)
bodyMedium14sp/20spBeschriftungen von Optionsfeldern, Text in Pillen-Schaltflächen, Segmentnamen
bodySmall muted12sp/16spStatus und Hinweise („36540 m bis zum Punkt“, „74 m · Maximum, der Gast darf verringern“, Hinweistexte). Farbe: onSurfaceVariant
Rule: innerhalb einer Rolle keine Schnitte mischen. Ist etwas titleMedium SemiBold, dann überall SemiBold — nicht hier regular und dort Semi.

3. Rhythmus und Abstände

Die Skala

Wir arbeiten vereinbarungsgemäß in Vielfachen von 2 / 4 / 8 / 10 / 14 / 16 / 20. Kein Mal üppig, mal karg: gleiche Elemente bekommen gleiche Abstände.

Zwischen Karten im Hauptscroll

Innerhalb einer Karte (RuleCard)

Innerhalb einer FieldSection (Beschriftung plus Inhalt)

Pillen-Schaltflächen und Status

Schieberegler sind ein Sonderfall

Ein Material-3-Schieberegler belegt im Layout wegen der Mindest-Berührfläche rund 48 dp, wovon die sichtbare Spur nur etwa 4 dp in der Mitte ausmacht, mit je rund 22 dp leerer Berührfläche darüber und darunter. Daher:

Das Ergebnis: Der Abstand vom letzten sichtbaren Element — Pille, Optionsfeld oder Reglerknopf — bis zur Unterkante der Karte ist bei allen Karten etwa gleich.

4. Farben und Stufen

Drei Stufen des Vertrauens in einen Gast

Jede Regel — Geolokalisierung, WLAN, Zeit, Autorisierung, Bestätigung — und der Aktivierungsblock nehmen eine von drei Stufen an. Der Symbolkreis der Karte erhält die passende Farbe, wenn der Schalter an ist.

KeyLabelColourDescription
own Der Gast entscheidet #3BA55D (green) Der Gast wählt die Einstellung selbst
suggest Preset #E5B409 (yellow) Der Wert ist gesetzt, und der Gast darf ihn ändern
force Locked #CC3322 (red) Der Wert ist gesetzt, und der Gast kann ihn nicht ändern

Bei ausgeschaltetem Schalter wird der Kreis grau (#9AA0A6), gleich welche Stufe gewählt ist.

Die Bedeutung von Maximum und Minimum: in yellow (Vorgegeben) Der Radiuswert ist ein Maximum, und der Gast darf ihn nur senken. Bei der Zahl der WLAN-Netze — der Übereinstimmungsschwelle — ist es umgekehrt: ein Minimum, das der Gast nur erhöhen darf. Die Richtung der Freiheit kehrt sich um, und die Statustexte sagen es unverblümt: „Maximum, der Gast darf verringern“ / „Minimum, der Gast darf erhöhen“.

Regeln für die Stufenbeschreibungen

5. Bedienelemente

Der farbige Kreis mit Symbol (38 dp)

Ein einheitlicher 38-dp-Landeplatz in der ganzen App:

Optionsfelder

In Box(Modifier.size(38.dp), contentAlignment=Center) { RadioButton(...) } einwickeln, damit die Mitte des Optionskreises mit der Mitte des farbigen Kreises darüber fluchtet. Ohne Hülle wandert das Optionsfeld waagerecht, weil RadioButton mit eigenen Innenabständen zeichnet.

Zwischen Optionsfeld und seinem Text: Spacer(14.dp). Zwischen Optionszeilen einer Gruppe: Column(spacedBy(4.dp)).

Die Mindest-Berührfläche ist deaktiviert: CompositionLocalProvider(LocalMinimumInteractiveComponentEnforcement provides false) — sonst schwillt jede Optionszeile auf 48 dp an und zerstört den Rhythmus.

Switch

Ein Standard-Schalter von Material 3, rechts vom Kartentitel. Er schaltet die ganze Regel ab, die Stufenfarbe wird dann nicht gezeigt — der Kreis wird grau.

Segmentierte Reihe

Ein eigenes Bedienelement zum Wechseln der Modi innerhalb einer Regel — derzeit nur im WLAN: „Nach einem bestimmten Netz“ / „Nach den Netzen ringsum“. Zwei Elemente in einer Row, jedes mit weight(1f):

Pillen-Schaltflächen

Umriss, Symbol und Text, vollständig abgerundet. Für zweitrangige Aktionen — „Aktuelle Position verwenden“, „Netze in der Umgebung erfassen“. Im deaktivierten Zustand fallen Umriss und Text auf alpha=0.4.

Slider

Siehe Abschnitt 3 zu offset(y=-16.dp) und sliderTrim(). Vor einem Schieberegler steht stets ein StatusLine mit Statustext (bodySmall, gedämpft) — „74 m · Maximum, der Gast darf verringern“.

Das Aufklappmenü der Stufen

Wird durch Tippen auf die Titelzeile der Karte geöffnet — die ganze Row außer dem Schalter. Es erscheint direkt unter der Kopfzeile, über die volle Breite des Karteninhalts. Dafür:

Die Menüeinträge atmen, statt flache Zeilen zu sein: links ein Farbmarker, die Bezeichnung fett, darunter die Beschreibung in kleiner, gedämpfter Schrift. Senkrecht richten sie sich an der ersten Zeile aus, der Bezeichnung.

6. Animationen

Der pulsierende Aktivierungskreis

Anders als die gewöhnlichen farbigen Kreise der Regeln pulsiert der Kopfkreis der Aktivierung.

Die Alpha-Formel nicht anrühren. Sie brauchte mehrere Anläufe, und jede Vereinfachung — linear (1−p) oder ease-out — erzeugt einen sichtbaren Ruck.

7. Textregeln

Punctuation

Ein einzelner Satz in einer Oberflächenzeile bekommt keinen Punkt. Punkte erscheinen nur bei zwei oder mehr Sätzen, um sie zu trennen. Das gilt für alle Beschreibungen, Hinweise, Status, Tooltips, Überschriften und einzelnen Sätze.

In wessen Stimme wir schreiben

Die Wahl zwischen Maximum und exaktem Wert

In Schieberegler-Status im gelben Modus (Vorgegeben) nennen wir die Richtung der Freiheit unverblümt:

In Rot (Gesperrt): „74 m · genau“ / „5 von 7 · genau“.

Die Bezeichnungen der Stufen stehen fest

„Der Gast entscheidet / Vorgegeben / Gesperrt“ haben sich eingebürgert; wir ändern sie nicht.

8. UX-Muster

Ein Schalter oder eine Optionswahl „nicht ausgewählt“

Hat eine Regel einen Aus-Zustand, drücke ihn mit einem Schalter aus, nicht mit einer Optionswahl wie „Nicht erforderlich / Nein / Aus“. Sonst hat der Nutzer zwei Wege, dasselbe abzuschalten, und das verwirrt.

Examples:

Koordinaten und die Aktionen rechts

Im Block „Koordinaten“ stehen die Symbole zum Kopieren und Löschen rechts auf Höhe beider Zeilen (Beschriftung und Status). Umgesetzt als Row { Column(weight=1f) { label; status }; CopyIcon; DeleteIcon }. Die Symbole werden senkrecht am Paar als Ganzem zentriert.

Den Kartenkörper zeigen und verbergen

Der Körper klappt nur auf, wenn:

Animation: expandVertically(tween(220)) + fadeIn(tween(220)) beim Öffnen, shrinkVertically(tween(180)) + fadeOut(tween(120)) beim Schließen.

Wann der Dialog „Schlüssel hinzugefügt“ zu zeigen ist

Beim Empfang eines Gastschlüssels — nur wenn die App im Bild ist und der Schlüssel neu und keine Wiederholung ist. Sonst speichern wir still.

9. Was nicht anzurühren ist

Verwandte Dokumente

Zuletzt aktualisiert: 18. April 2026 · Dokumentversion 2.07