Пытаюсь работать над новинкой TabLayout
из библиотеки дизайна андроида.
Я хочу изменить текст табуляции на собственный шрифт . И я попытался найти некоторые стили, связанные с этим TabLayout
, но в итоге остановился на этом .
Пожалуйста, расскажите, как я могу изменить шрифты текста вкладки.
Ответы:
Создайте TextView из кода Java или XML, подобного этому
Обязательно сохраните идентификатор, как он здесь, потому что TabLayout проверяет этот идентификатор, если вы используете настраиваемый текстовый просмотр
Затем из кода надуйте этот макет и установите пользовательский вид
Typeface
в этом текстовом представлении и добавьте это настраиваемое представление на вкладкуисточник
tabTextColor
иtabSelectedTextColor
свойство в этой ситуации?Если вы используете
TabLayout
и хотите изменить шрифт, вам нужно добавить новый цикл for к предыдущему решению, например:См. Изменение стиля шрифта на вкладках панели действий с помощью sherlock
источник
TabLayout
setTypeFace
- это aTypeFace
, на случай, если вы не можете найтиFont
класс (который, похоже, не существует для меня)Создайте свой собственный стиль и используйте родительский стиль как
parent="@android:style/TextAppearance.Widget.TabWidget"
И в макете вкладки используйте этот стиль как
app:tabTextAppearance="@style/tab_text"
Пример: Стиль:
Пример: компонент макета вкладки:
источник
parent="TextAppearance.Design.Tab"
в своем случае.TextAppearance.Widget.TabWidget
. Ответ @Javatar исправил это для меня.Отличный ответ от правеен Шарма. Небольшое дополнение: вместо того, чтобы использовать
changeTabsFont()
везде, где вам нужноTabLayout
, вы можете просто использовать свои собственныеCustomTabLayout
.И вот еще.
TabView
этоLinearLayout
сTextView
внутренней стороны (это может также необязательно содержатьImageView
). Так можно сделать код еще проще:Но я бы не рекомендовал такой способ. Если
TabLayout
реализация изменится, этот код может работать некорректно или даже дать сбой.Другой способ настройки
TabLayout
- добавление к нему пользовательского представления. Вот отличный пример .источник
addTab(Tab tab, int position, boolean setSelected)
вместоaddTab(Tab tab)
.Чтобы использовать поддержку шрифтов в
XML
функции на работающих устройствахAndroid 4.1
(уровень API 16) и выше, используйте библиотеку поддержки 26+.myfont.ttf
файл во вновь созданную папку шрифтовПри
res/values/styles.xml
добавлении:В файл макета добавьте приложение: tabTextAppearance = "@ style / customfontstyle",
См. [Шрифты в xml]. ( Https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml )
источник
Следующий метод полностью
ViewGroup
рекурсивно изменит шрифт . Я выбрал этот метод, потому что вам не нужно заботиться о внутренней структуреTabLayout
. Я использую библиотеку каллиграфии, чтобы установить шрифт.источник
Для поддержки дизайна 23.2.0, используя setupWithViewPager, вам придется переместить код из addTab (вкладка Tab) в addTab (вкладка Tab, логическое setSelected).
источник
Вы можете использовать это, у меня это работает.
источник
Что ж, я нашел это просто в 23.4.0 без использования цикла. Просто переопределите addTab (вкладка @NonNull Tab, логическое setSelected), как предлагает @ejw.
А вот и XML
Надеюсь, это поможет :)
источник
android:textColor="@color/graylove"
должна иметь селектор списка состояний для этого с указанным цветомКак ответил Андрей , вы можете изменить шрифт, расширив класс TabLayout . И как сказал Пенззз , вы не можете сделать это в методе addTab . Переопределите метод onLayout, как показано ниже:
Необходимо перезаписать метод onLayout, потому что, когда вы используете метод setupWithViewPager для привязки TabLayout к ViewPager, вам необходимо установить текст вкладок либо с помощью метода setText, либо в PagerAdapter после этого, и когда это произойдет, метод onLayout будет вызван в родительской ViewGroup ( TabLayout), и это место для установки шрифта настройки. (Изменение текста TextView вызывает вызов метода onLayout его родителя - у tabView есть два дочерних элемента, один - ImageView, другой - TextView)
Другое решение:
Во-первых, эти строки кода:
В приведенном выше решении следует писать вне двух циклов.
Но лучшее решение для API> = 16 использует android: fontFamily :
Создайте каталог ресурсов Android с именем font и скопируйте в него нужный шрифт.
Затем используйте эти стили:
источник
onLayout()
при каждом изменении макета, например при переключении вкладок или даже при прокрутке списка под вкладками, при этом вложенныеfor
s во многих вкладкахTabLayout
приложение будут задерживать.onLayout()
действительно вызывается несколько раз при переключении вкладок (не знаю, почему именно), но чтобы учесть это, я устанавливаю шрифты только тогда, когдаboolean changed
истинно. Это предотвращает установку шрифтов несколько раз.Мой метод Resolve точно так же, измените текст вкладки Указанный,
источник
источник
Расширение Kotlin, которое сработало для меня:
источник
Мой 2p, Kotlin с проверкой ссылок, применим везде, так как остановится, если что-то пойдет не так.
источник
А вот моя реализация на Kotlin, которая также позволяет изменять шрифт для выбранных и невыделенных вкладок.
в attrs.xml:
источник
С функциями расширения kotlin используйте это:
}
источник
+ Изменить
if (tabViewChild instanceof TextView) {
для
чтобы он работал с android.support.design.widget.TabLayout (по крайней мере, из com.android.support:design:23.2.0)
источник