ВЫПУСКА
Причина, по которой этот код не работает, состоит в том, что на самом деле вы не меняете фон вкладки, а цвет индикатора выбранной вкладки
РЕШЕНИЕ
Поскольку я не уверен, чего вы пытаетесь достичь, я дам вам некоторую полезную информацию о TabLayout.
Метод TabLayout.getTabCount()
возвращает количество вкладок в макете;
метод TabLayout.getTabAt()
возвращает объект типа TabLayout.Tab
, представляющий вкладку.
С помощью этих двух методов вы можете перебирать все вкладки и использовать метод TabLayout.Tab.setCustomView(int)
или TabLayout.Tab.setCustomView(View)
, чтобы использовать настраиваемое представление для этой вкладки, как объяснено здесь в ответе MarcGV.
Если вы хотите более динамичное решение, вы можете использовать TabLayout.getSelectedTabPosition()
, чтобы получить индекс выбранной вкладки и получить объект Tab с помощью метода, упомянутого ранее.
Если вам нужно изменить только цвет каждой вкладки, вы можете попробовать сделать следующее:
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
tab.getCustomView().setBackgroundColor(Color.parseColor(getRandomColor()));
}
Я предполагаю, что метод getRandomColor()
выбирает одно значение от 000000 до FFFFFF.