React Native für TV: Android TV und tvOS Navigation
AI generated
RN
native
React Native / TV
React Native für TV: Android TV und tvOS Navigation
Wie Fokus-Management statt Touch die Steuerung von TV-Apps bestimmt

Eine App auf dem Fernseher kennt keine Berührung, keine Wischgeste und keinen Tap, sondern ausschließlich eine Fernbedienung mit Richtungstasten und einer Bestätigungstaste, die einen sichtbaren Fokus-Ring von einem Element zum nächsten bewegt. Wer eine bestehende React-Native-App unverändert auf Android TV oder tvOS portiert, stößt schnell auf Buttons, die sich nicht anwählen lassen, und Listen, deren Fokus beim Scrollen verloren geht. Dieser Artikel zeigt, wie Fokus-Management als zentrales Konzept funktioniert, wie bestehende Touch-Komponenten dafür angepasst werden, und wo sich Android TV und tvOS in ihrer Zielplattform grundlegend unterscheiden.

12 Min. Lesezeit Android TV tvOS Focus Management

1. react-native-tvos: Grundlage für TV-Apps mit React Native

React Native unterstützt TV-Plattformen nicht über das offizielle Kernrepository, sondern über react-native-tvos, einen von der Community aktiv gepflegten Fork, der zusätzliche native Module und Anpassungen für Android TV und tvOS mitbringt, während die JavaScript-API weitgehend identisch zum Standard-React-Native bleibt. Dieser Fork wird bewusst als eigenständiges npm-Paket veröffentlicht und regelmäßig gegen neue React-Native-Versionen synchron gehalten, sodass ein bestehendes Mobile-Projekt in vielen Fällen mit überschaubarem Aufwand um ein separates TV-Ziel erweitert werden kann, ohne die gesamte Codebasis zu duplizieren.

Der praktische Einstieg erfolgt meist über ein separates Expo-Preset oder eine eigene native Konfiguration, die parallel zur bestehenden Mobile-Konfiguration existiert, weil TV-Apps eigene native Projektdateien wie ein zusätzliches Android-TV-Manifest oder ein eigenes tvOS-Xcode-Target benötigen. Ein gemeinsamer JavaScript-Codeanteil bleibt dabei über Plattform-Weichen wie Platform.isTV erhalten, während plattformspezifisches natives Setup getrennt gepflegt wird.

2. Fokus-Management als zentrales Steuerungskonzept

Anders als bei Touch-Oberflächen, bei denen jedes Element unabhängig voneinander direkt berührbar ist, existiert auf einem Fernseher zu jedem Zeitpunkt genau ein fokussiertes Element, das über Richtungstasten der Fernbedienung angesteuert und über eine Bestätigungstaste ausgelöst wird. Dieses Fokus-Modell erfordert, dass jede interaktive Komponente explizit fokussierbar ist und dass die Reihenfolge, in der sich der Fokus zwischen Elementen bewegt, vorhersehbar und logisch nachvollziehbar bleibt, statt sich zufällig aus der visuellen Anordnung zu ergeben.

Die Komponente TVFocusGuideView aus react-native-tvos übernimmt dabei die Aufgabe, den Fokus innerhalb eines bestimmten Bereichs gezielt zu lenken, etwa um sicherzustellen, dass der Fokus beim ersten Betreten eines Screens automatisch auf ein sinnvolles Startelement springt, statt auf einem willkürlichen, möglicherweise unsichtbaren Element zu landen. Für einzelne Elemente lässt sich zusätzlich über die Prop hasTVPreferredFocus explizit festlegen, welches Element beim Rendern eines Screens den initialen Fokus erhalten soll.


import { TVFocusGuideView } from 'react-native';

function ProductGrid({ products }: { products: Product[] }) {
  return (
    <TVFocusGuideView autoFocus style={{ flexDirection: 'row', flexWrap: 'wrap' }}>
      {products.map((product, index) => (
        <ProductTile
          key={product.id}
          product={product}
          hasTVPreferredFocus={index === 0}
        />
      ))}
    </TVFocusGuideView>
  );
}

3. Fernbedienungs-Events mit TVEventHandler abfangen

Über den TVEventHandler lassen sich Ereignisse der Fernbedienung wie das Drücken der Zurück-Taste, das Auslösen des Menü-Buttons auf der Apple TV Remote oder Play-Pause-Tasten direkt in JavaScript abfangen, unabhängig davon, welches Element gerade fokussiert ist. Dieser Mechanismus eignet sich besonders für globale Aktionen, etwa das Schließen eines Video-Players über die Zurück-Taste oder das Anzeigen eines Kontextmenüs über eine lange Taste, die sich nicht sinnvoll an ein einzelnes fokussierbares Element binden lassen.

Für die meisten alltäglichen Interaktionen, etwa das Auswählen eines Menüpunkts oder das Starten eines Videos, genügt dagegen der reguläre onPress-Handler einer Pressable-Komponente, weil das Betriebssystem die Bestätigungstaste der Fernbedienung automatisch als Press-Ereignis auf dem aktuell fokussierten Element interpretiert. TVEventHandler bleibt damit auf Sonderfälle beschränkt, die außerhalb des normalen Fokus-Interaktionsmodells liegen, und sollte nicht als generelle Alternative zum Fokus-System missverstanden werden.

4. Bestehende Touch-Komponenten für Fokus anpassen

Eine für Touch entworfene Pressable-Komponente reagiert typischerweise nur auf onPress und vielleicht onPressIn sowie onPressOut, besitzt aber keine visuelle Rückmeldung für den Fokus-Zustand, weil dieser Zustand auf einer Touch-Oberfläche schlicht nicht existiert. Für TV-Plattformen muss dieselbe Komponente zusätzlich auf onFocus und onBlur reagieren und dabei einen klar erkennbaren visuellen Unterschied zeigen, etwa eine Skalierung, einen Rahmen oder einen Schatten, weil Nutzerinnen und Nutzer ohne diesen visuellen Hinweis auf dem Fernseher schlicht nicht erkennen können, welches Element aktuell bedienbar ist.

In der Praxis lohnt sich eine gemeinsame FocusablePressable-Wrapper-Komponente, die auf mobilen Plattformen wie eine normale Pressable-Komponente funktioniert und auf TV-Plattformen zusätzlich lokalen Fokus-Zustand über useState verwaltet, um darauf basierend Skalierung und Rahmenfarbe per Animated API zu steuern. Diese Kapselung verhindert, dass Fokus-Logik in jeder einzelnen Komponente der App separat implementiert werden muss.


import { useState } from 'react';
import { Pressable, Animated, Platform } from 'react-native';

function FocusablePressable({ onPress, children }: Props) {
  const [focused, setFocused] = useState(false);

  return (
    <Pressable
      onPress={onPress}
      onFocus={() => setFocused(true)}
      onBlur={() => setFocused(false)}
      style={[
        styles.base,
        Platform.isTV && focused ? styles.focused : null,
      ]}
    >
      {children}
    </Pressable>
  );
}

5. Android TV: Besonderheiten und Store-Anforderungen

Android TV verlangt für die Veröffentlichung im Google Play Store auf Fernsehgeräten ein eigenes Banner-Bild in der AndroidManifest.xml, sowie eine explizite Kennzeichnung der App als Leanback-fähig über das Feature android.software.leanback, weil der Leanback-Launcher, die kachelbasierte TV-Startoberfläche von Android, ohne diese Angaben die App gar nicht erst in der Übersicht anzeigt. Zusätzlich muss die App explizit deklarieren, dass sie keinen Touchscreen zwingend voraussetzt, da der Play Store sonst automatisch von einem Smartphone- oder Tablet-Zielgerät ausgeht und die App auf Android-TV-Geräten unsichtbar bleibt.

Auf technischer Ebene unterscheidet sich das Fokus-Verhalten von Android TV zusätzlich dadurch, dass es stark auf dem nativen Android-View-Fokus-System basiert, wodurch sich individuelle Anpassungen der Fokus-Reihenfolge über nextFocusUp, nextFocusDown, nextFocusLeft und nextFocusRight vornehmen lassen, wenn die automatische, geometrisch bestimmte Fokus-Reihenfolge des Systems in einem konkreten Layout nicht zum gewünschten Ergebnis führt, etwa bei asymmetrisch angeordneten Karten-Grids.

6. tvOS: Focus Engine, Siri Remote und Parallax

Apples tvOS verwaltet Fokus über die systemeigene Focus Engine, die im Gegensatz zum expliziten nextFocus-System von Android automatisch anhand der geometrischen Anordnung sichtbarer Elemente entscheidet, welches Element beim Drücken einer Richtungstaste als nächstes fokussiert wird, ohne dass Entwicklerinnen und Entwickler diese Reihenfolge in den meisten Fällen manuell festlegen müssen. Diese automatische Ermittlung funktioniert zuverlässig für regelmäßige Grid-Layouts, kann bei unregelmäßig positionierten oder überlappenden Elementen jedoch zu unerwarteten Sprüngen führen, die sich nur über gezieltes Umstrukturieren des Layouts oder über TVFocusGuideView beheben lassen.

Die Siri Remote unterscheidet sich zusätzlich von klassischen Fernbedienungen durch ihr Touch-Pad, über das Wischgesten anstelle klassischer Richtungstasten erkannt werden, was React Native über dieselben Fokus-Bewegungs-Events abbildet, sodass auf JavaScript-Ebene kein Unterschied zur älteren, tastenbasierten Siri Remote entsteht. Zusätzlich erwartet tvOS für fokussierte Bild-Elemente häufig einen dezenten Parallax-Effekt, der sich mit einer nativen tvOS-Komponente wie TVParallaxProperties an Image-Elementen konfigurieren lässt und dem nativen Look von tvOS-Apps entspricht.

React Navigation funktioniert grundsätzlich auch auf TV-Plattformen, allerdings mit einer wichtigen konzeptionellen Verschiebung: Wo eine mobile App häufig auf lange, vertikal scrollbare Listen setzt, dominieren auf dem Fernseher horizontal und vertikal navigierbare Grid-Layouts, weil diese Struktur der Bewegung der Fernbedienung in vier Richtungen natürlicher entspricht als eine reine vertikale Liste. Eine Tab-Navigation am oberen Bildschirmrand ersetzt dabei häufig die von Mobile bekannte Bottom-Tab-Bar, weil der untere Bildschirmrand auf großen Fernsehern außerhalb des bequemen Sichtfelds liegt.

Für Detail-Screens, die auf Mobile typischerweise als Push-Navigation im Stack umgesetzt werden, bleibt dasselbe Stack-Konzept auf TV-Plattformen technisch funktionsfähig, sollte aber mit größeren, klar erkennbaren Fokus-Zielen arbeiten, weil kleine Touch-Ziele, die auf einem Smartphone-Display gut funktionieren, aus mehreren Metern Entfernung auf einem Fernseher kaum noch erkennbar sind. Eine bewährte Faustregel setzt fokussierbare Elemente auf mindestens die doppelte visuelle Größe vergleichbarer Mobile-Elemente.

8. Testing auf Android-TV-Emulatoren und tvOS-Simulatoren

Der Android Studio Device Manager stellt eigene Android-TV-Emulator-Profile mit unterschiedlichen Auflösungen bereit, deren Fernbedienungssteuerung über die Pfeiltasten der Computertastatur bedient wird, was für erste funktionale Tests der Fokus-Navigation völlig ausreicht, jedoch die tatsächliche Bedienbarkeit mit einer echten Fernbedienung aus der Distanz eines Wohnzimmers nicht vollständig ersetzt. Der tvOS-Simulator in Xcode bietet ein vergleichbares Verhalten und lässt sich zusätzlich über eine simulierte Siri Remote inklusive Touch-Pad-Wischgesten bedienen.

Für eine realistische Endabnahme sollte jede TV-App zusätzlich auf mindestens einem physischen Gerät je Plattform getestet werden, weil sowohl die tatsächliche Eingabelatenz der Fernbedienung als auch die reale Lesbarkeit von Texten und Fokus-Indikatoren aus typischem Sofa-Betrachtungsabstand sich in einem Emulator nur eingeschränkt beurteilen lassen. Besonders die Mindestschriftgröße und der Kontrast von Fokus-Ringen sollten auf einem echten Fernseher aus mehreren Metern Entfernung verifiziert werden.

9. Typische Fallstricke: fehlender Fokus-Indikator und Scroll-Synchronisation

Der häufigste Fehler bei der TV-Portierung einer bestehenden Mobile-App ist ein fehlender oder zu subtiler visueller Fokus-Indikator, weil eine für Touch entworfene Komponente oft überhaupt keinen sichtbaren Unterschied zwischen fokussiertem und unfokussiertem Zustand definiert. Ohne diesen Indikator wirkt eine App auf dem Fernseher für Nutzerinnen und Nutzer praktisch unbedienbar, selbst wenn die zugrunde liegende Navigation technisch korrekt funktioniert, weil niemand erkennen kann, welches Element die Bestätigungstaste gerade auslösen würde.

Ein zweites, subtileres Problem entsteht, wenn eine ScrollView oder FlatList den Fokus zwar korrekt zwischen ihren Elementen bewegt, dabei aber nicht automatisch mitscrollt, sodass ein fokussiertes Element am unteren Bildschirmrand teilweise oder vollständig unsichtbar bleibt. Dieses Problem lässt sich lösen, indem auf onFocus jedes Listenelements gezielt scrollToIndex oder ein vergleichbarer Aufruf ausgelöst wird, der das fokussierte Element aktiv in den sichtbaren Bereich zurückholt, statt sich auf automatisches Scrollverhalten zu verlassen, das auf TV-Plattformen weniger zuverlässig funktioniert als auf Mobile.

Aspekt Android TV tvOS Praktische Konsequenz
Fokus-Ermittlung Explizit über nextFocus-Attribute steuerbar Automatisch über die Focus Engine Android braucht mehr manuelle Konfiguration bei komplexen Layouts
Fernbedienung Standard-D-Pad, teils Sprachsteuerung Siri Remote mit Touch-Pad und Wischgesten Gestenerkennung wird auf JavaScript-Ebene identisch abgebildet
Store-Anforderungen Leanback-Banner, Feature-Flag in AndroidManifest.xml Eigenes tvOS-Target in Xcode Beide Plattformen benötigen zusätzliche native Konfiguration
Visueller Stil Frei gestaltbar Parallax-Effekt bei fokussierten Bildern erwartet TVParallaxProperties für nativen tvOS-Look nutzen
Testing Emulator mit Pfeiltasten-Steuerung Simulator mit virtueller Siri Remote Physisches Gerät für realistische Abnahme unverzichtbar

Mironsoft

React-Native-App-Entwicklung und Magento-Anbindung

Eine mobile App zum Magento-Shop, die wirklich rund läuft?

Wir entwickeln React-Native-Apps, die sauber an die Magento REST- oder GraphQL-API angebunden sind, von der ersten Codezeile bis zur Veröffentlichung im App Store und bei Google Play.

App-Konzeption

Architektur und Feature-Umfang einer Magento-angebundenen App gemeinsam planen.

Magento-API-Integration

Produktkatalog, Warenkorb und Checkout sauber an die Shop-API anbinden.

Store-Veröffentlichung

App Store- und Google-Play-Freigabeprozess ohne Stolperfallen begleiten.

10. Zusammenfassung

React Native für TV: Das Wichtigste auf einen Blick

Basis

react-native-tvos bringt native TV-Unterstützung mit, die JavaScript-API bleibt größtenteils identisch zu Standard-React-Native.

Fokus statt Touch

TVFocusGuideView und hasTVPreferredFocus steuern, welches Element den Fokus erhält und wie er sich bewegt.

Android vs. tvOS

Android TV steuert Fokus explizit über nextFocus-Attribute, tvOS ermittelt ihn automatisch über die Focus Engine.

Häufigster Fehler

Ein fehlender visueller Fokus-Indikator macht eine technisch funktionierende App faktisch unbedienbar.

11. FAQ: React Native für TV: Das Wichtigste auf einen Blick

1Was ist react-native-tvos?
Ein von der Community aktiv gepflegter Fork von React Native, der zusätzliche native Module und Anpassungen für Android TV und tvOS mitbringt, während die JavaScript-API weitgehend identisch zum Standard-React-Native bleibt. Er wird als eigenständiges npm-Paket veröffentlicht und regelmäßig synchron gehalten.
2Wie unterscheidet sich Fokus-Management grundlegend von Touch-Bedienung?
Auf einem Fernseher existiert zu jedem Zeitpunkt genau ein fokussiertes Element, das über Richtungstasten der Fernbedienung angesteuert wird, während bei Touch jedes Element unabhängig direkt berührbar ist. Jede interaktive Komponente muss deshalb explizit fokussierbar sein und eine vorhersehbare Fokus-Reihenfolge besitzen.
3Wofür wird TVFocusGuideView verwendet?
Die Komponente lenkt den Fokus innerhalb eines bestimmten Bereichs gezielt, etwa um sicherzustellen, dass der Fokus beim ersten Betreten eines Screens automatisch auf ein sinnvolles Startelement springt, statt auf einem willkürlichen Element zu landen.
4Wann sollte TVEventHandler statt eines normalen onPress-Handlers verwendet werden?
TVEventHandler eignet sich für globale Aktionen wie das Schließen eines Video-Players über die Zurück-Taste, die sich nicht an ein einzelnes fokussierbares Element binden lassen. Für reguläre Interaktionen wie das Auswählen eines Menüpunkts genügt der normale onPress-Handler.
5Wie passt man eine bestehende Touch-Komponente für TV-Fokus an?
Die Komponente muss zusätzlich auf onFocus und onBlur reagieren und dabei einen klar erkennbaren visuellen Unterschied zeigen, etwa eine Skalierung oder einen Rahmen. Eine gemeinsame FocusablePressable-Wrapper-Komponente kapselt diese Logik zentral für die ganze App.
6Was verlangt der Google Play Store speziell für Android-TV-Apps?
Ein eigenes Banner-Bild in der AndroidManifest.xml sowie die explizite Kennzeichnung als Leanback-fähig über das Feature android.software.leanback. Ohne diese Angaben zeigt der Leanback-Launcher die App gar nicht in der TV-Startoberfläche an.
7Wie unterscheidet sich die Fokus-Ermittlung zwischen Android TV und tvOS?
Android TV nutzt das native View-Fokus-System und lässt sich explizit über nextFocusUp, nextFocusDown, nextFocusLeft und nextFocusRight steuern. tvOS ermittelt den nächsten Fokus dagegen automatisch über die systemeigene Focus Engine anhand der geometrischen Anordnung sichtbarer Elemente.
8Was ist der TVParallaxProperties-Effekt auf tvOS?
Ein dezenter Parallax-Effekt, den tvOS für fokussierte Bild-Elemente erwartet und der sich über TVParallaxProperties an Image-Elementen konfigurieren lässt. Er entspricht dem nativen Look typischer tvOS-Apps und sollte bei fokussierbaren Bildkacheln berücksichtigt werden.
9Warum sollte eine TV-App zusätzlich auf einem physischen Gerät getestet werden?
Weil sowohl die tatsächliche Eingabelatenz der Fernbedienung als auch die reale Lesbarkeit von Texten und Fokus-Indikatoren aus typischem Sofa-Betrachtungsabstand sich in einem Emulator oder Simulator nur eingeschränkt beurteilen lassen.
10Wie löst man das Problem, dass eine Liste beim Fokus-Wechsel nicht mitscrollt?
Über onFocus jedes Listenelements wird gezielt scrollToIndex oder ein vergleichbarer Aufruf ausgelöst, der das fokussierte Element aktiv in den sichtbaren Bereich zurückholt, statt sich auf automatisches Scrollverhalten zu verlassen, das auf TV-Plattformen weniger zuverlässig funktioniert.