ns-android-window-insets

Installation
SKILL.md

Android window insets: the model, and the fullscreen-modal trap

On an edge-to-edge Android window the system dispatches window insets (status bar, nav/gesture bar, display cutout, IME) down the view tree. Core 9.1+ surfaces this via two per-view APIs:

  • androidOverflowEdge (property) — how a view treats insets that reach it: none (apply insets as own padding — consume), ignore (pass through untouched), dont-apply (don't pad self; pair with an inset handler), or a comma list of edges: top, bottom, left, right, all-but-top, top-dont-consume, and so on (dont-apply in a list overrides everything else).
  • androidOverflowInset (event, layout views only) — fires with args.inset when insets reach the view, letting code mutate or consume them before they propagate further.

args.inset is a DataView-backed struct shared with native. Fields: left/top/right/bottom (device pixels, not dip — convert with Utils.layout.toDeviceIndependentPixels), imeBottom, per-edge consumed flags topConsumed/bottomConsumed/leftConsumed/rightConsumed/imeBottomConsumed, and cutout*. Zero an edge AND set its consumed flag to fully swallow it.

The key default: a plain view (Label, Image, …) that receives insets applies them as its own padding. That is desirable exactly once — at whatever single view is designated the consumer. If insets reach leaf views, every one of them pads itself.

Main window: one consumer, high up

Give the app's root view an explicit consumer role; individual screens opt into full bleed while active and restore on leave. For main-window edge-to-edge recipes (seamless tab bars, docked bottom UI) see ns-android-edge-to-edge.

<!-- app root: absorb insets as padding; nothing below ever sees them -->
<RootLayout androidOverflowEdge="none"> </RootLayout>
Installs
19
GitHub Stars
1
First Seen
Aug 28, 2026
ns-android-window-insets — nativescript/skills