Android TV bietet Einstellungen, mit denen Nutzer Untertitel-Einstellungen zentral festlegen können, um eine einheitliche Nutzung über alle Media-Apps hinweg zu ermöglichen.
Mit diesen Einstellungen können Nutzer Untertitel aktivieren, eine bevorzugte Sprache auswählen und einen benutzerdefinierten Untertitelstil festlegen. Nutzer können auch angeben, ob sie vereinfachte Untertitel auf dem Niveau der 3. Klasse bevorzugen, die als „Easy Reader“ bezeichnet werden.
In diesem Leitfaden erfahren Sie, wie Sie vom System bereitgestellte Untertiteleinstellungen abrufen und auf die Untertitel in Ihrer App anwenden.
Die Untertiteloptionen, einschließlich einer Vorschau des ausgewählten Untertitelstils, finden Sie unter Einstellungen > Bedienungshilfen > Untertitel:
CaptioningManager abrufen
Rufen Sie den Dienst CaptioningManager aus einer Aktivität über Context ab:
CaptioningManager captioningManager = (CaptioningManager) context.getSystemService(Context.CAPTIONING_SERVICE);
Änderungen an den Untertiteleinstellungen verarbeiten
Änderungen an den Untertiteleinstellungen können Sie mit der Klasse CaptioningChangeListener verarbeiten:
if (captioningManager != null) {
// Define a class to store the CaptionStyle details.
CurrentCaptionStyle currentCaptionStyle = new CurrentCaptionStyle();
// Define the listeners.
captioningManager.addCaptioningChangeListener(new CaptioningChangeListener() {
@Override
public void onEnabledChanged(boolean enabled) {
super.onEnabledChanged(enabled);
Log.d(TAG, "onEnabledChanged");
currentCaptionStyle.isEnabled = enabled;
}
@Override
public void onLocaleChanged(@Nullable Locale locale) {
super.onLocaleChanged(locale);
Log.d(TAG, "onLocaleChanged");
currentCaptionStyle.locale = locale;
if (locale == null) {
currentCaptionStyle.isEasyReaderEnabled = false;
} else {
currentCaptionStyle.isEasyReaderEnabled = locale.getVariant().contains("simple");
}
}
@Override
public void onFontScaleChanged(float fontScale) {
super.onFontScaleChanged(fontScale);
Log.d(TAG, "onFontScaleChanged");
currentCaptionStyle.fontScale = fontScale;
}
@Override
public void onUserStyleChanged(@NonNull CaptionStyle userStyle) {
super.onUserStyleChanged(userStyle);
Log.d(TAG, "onUserStyleChanged");
currentCaptionStyle.hasBackgroundColor = userStyle.hasBackgroundColor();
currentCaptionStyle.backgroundColor = userStyle.backgroundColor;
currentCaptionStyle.backgroundOpacity = userStyle.backgroundColor >>> 24;
currentCaptionStyle.hasForegroundColor = userStyle.hasForegroundColor();
currentCaptionStyle.foregroundColor = userStyle.foregroundColor;
currentCaptionStyle.foregroundOpacity = userStyle.foregroundColor >>> 24;
currentCaptionStyle.hasWindowColor = userStyle.hasWindowColor();
currentCaptionStyle.windowColor = userStyle.windowColor;
currentCaptionStyle.windowOpacity = userStyle.windowColor >>> 24;
currentCaptionStyle.hasEdgeColor = userStyle.hasEdgeColor();
currentCaptionStyle.edgeColor = userStyle.edgeColor;
currentCaptionStyle.hasEdgeType = userStyle.hasEdgeType();
currentCaptionStyle.edgeType = userStyle.edgeType;
currentCaptionStyle.typeFace = userStyle.getTypeface();
}
});
}
Alternativ können Sie die Methode getUserStyle direkt aufrufen:
CaptionStyle systemCaptionStyle = captioningManager.getUserStyle();