Получить собственное текстовое представление в TabLayout - Android Design Library

Я создаю экран с фиксированным количеством вкладок (3), с размером текста 12sp и динамически меняющимся текстом и цветом индикатора на основе выбранной вкладки. Не хочу скользящих вкладок.

Для этого я устанавливаю собственное представление текста при создании этих вкладок, так как я хочу изменить размер текста (похоже, нет никакого способа изменить размер текста в TabLayout) и цвет текста. Теперь, как мне получить текстовое представление, прикрепленное к этим вкладкам?

Было бы намного проще, если бы TabLayout из Android Design Library раскрывал эти методы.

  1. Установить цвет индикатора
  2. Установить высоту индикатора
  3. Изменение размера текста
  4. Получить настраиваемый вид текста

Я сделал обходной путь для 1 и 2, используя отражение (не уверен, что это лучший способ). Решено 3 с помощью пользовательского текстового представления. Ищем способ решения 4.


person Vijay Raghavan    schedule 14.07.2015    source источник
comment
Конечно, весь смысл библиотеки дизайна заключается в том, чтобы соответствовать спецификации дизайна материалов для вкладок, включая сохранение размера текста и т. д.   -  person ianhanniballake    schedule 14.07.2015
comment
И вы могли бы использовать app:tabIndicatorColor и app:tabIndicatorHeight для #1 и #2   -  person ianhanniballake    schedule 14.07.2015
comment
Я хочу иметь первые две вкладки с двумя строками текста и третью вкладку с одной строкой текста. Спецификация говорит, что textSize должен быть 12sp, когда текст занимает две строки, и 14sp, если он находится на одной строке. Это означает, что должен быть простой способ установить разные размеры текста, верно?   -  person Vijay Raghavan    schedule 14.07.2015


Ответы (1)


TabLayout содержит ряд полезных XML-атрибутов, о которых вы, возможно, захотите знать:

  • app:tabIndicatorColor для установки цвета индикатора вкладки (по умолчанию ?attr/colorAccent (это, кажется, делает # 1 для вас)
  • app:tabIndicatorHeight для установки высоты индикатора вкладки (это, кажется, делает # 2 для вас)
  • app:tabTextAppearance для пользовательского TextAppearance текста вкладки (это может позволить вам сделать № 3)
  • app:tabTextColor для цвета текста вкладки (это позволяет сделать #4)
  • app:tabSelectedTextColor для цвета текста выбранной вкладки
person ianhanniballake    schedule 14.07.2015
comment
Спасибо за Ваш ответ. app:tabIndicatorColor у меня не сработает, так как мне нужно изменить цвет индикатора в зависимости от какого-то действия пользователя. Могу ли я добиться этого программно? Предложение по высоте индикатора в основном будет работать. Опять же, для app:tabTextColor и app:tabSelectedTextColor мне нужно изменить это динамически. Как я могу сделать это программно? - person Vijay Raghavan; 14.07.2015
comment
TabLayout имеет следующие методы: setSelectedTabIndicatorColor(), setSelectedTabIndicatorHeight(), вы пробовали? - person Spark.Bao; 11.09.2015