Применить настройки системных подписей

Android TV предоставляет настройки, позволяющие пользователю централизованно задавать параметры субтитров для создания единого пользовательского опыта во всех медиаприложениях.

Эти настройки позволяют пользователям включать субтитры, выбирать предпочтительный язык и определять собственный стиль субтитров в соответствии со своими потребностями. Пользователи также могут указать, предпочитают ли они упрощенные субтитры, соответствующие уровню чтения примерно третьего класса, известные как «Легкое чтение».

В этом руководстве показано, как получить и применить предоставленные системой настройки субтитров к субтитрам в вашем приложении.

Параметры субтитров, включая предварительный просмотр выбранного стиля субтитров, можно найти в разделе «Настройки» > «Специальные возможности» > «Субтитры» :

Меню настроек субтитров на Android TV.
Рисунок 1. Страница настроек субтитров.

Получите менеджер субтитров.

Получите доступ к службе CaptioningManager из Context в рамках действия:

CaptioningManager captioningManager = (CaptioningManager) context.getSystemService(Context.CAPTIONING_SERVICE);

Обработка изменений настроек субтитров

Для обработки изменений настроек субтитров реализуйте класс CaptioningChangeListener :

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();
    }

  });
}

В качестве альтернативы, вызовите метод getUserStyle напрямую:

CaptionStyle systemCaptionStyle = captioningManager.getUserStyle();