Android TV proporciona parámetros de configuración que permiten al usuario establecer las preferencias de subtítulos de forma centralizada para crear una experiencia coherente en las apps de contenido multimedia.
Estos parámetros de configuración permiten a los usuarios habilitar los subtítulos, seleccionar un idioma preferido y definir un estilo de subtítulos personalizado según sus necesidades. Los usuarios también pueden especificar si prefieren subtítulos simplificados con un nivel de lectura de tercer grado, conocidos como "Easy Reader".
En esta guía, se muestra cómo obtener y aplicar la configuración de subtítulos proporcionada por el sistema a los subtítulos de tu app.
Encuentra las opciones de subtítulos, incluida una vista previa del estilo de subtítulos seleccionado, en Configuración > Accesibilidad > Subtítulos:
Obtén CaptioningManager
Desde una actividad, obtén el CaptioningManager servicio de Context:
CaptioningManager captioningManager = (CaptioningManager) context.getSystemService(Context.CAPTIONING_SERVICE);
Cómo controlar los cambios en la configuración de subtítulos
Para controlar los cambios en la configuración de subtítulos, implementa la
CaptioningChangeListener clase:
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();
}
});
}
Como alternativa, llama al método getUserStyle directamente:
CaptionStyle systemCaptionStyle = captioningManager.getUserStyle();