Как изменить цвет текста в SlidingTabLayout?

Я сделал приложение, которое использует ActionBarCompat

Я создал вкладки, используя класс SlidingTabLayout .

Класс таков:

SlidingTabLayout.java

Но я не могу изменить цвет вкладок …

Мой фрагмент viewpager:

<swmovil.fyb.SlidingTabLayout android:id="@+id/mTabs" android:layout_width="match_parent" android:layout_height="48dip" /> <android.support.v4.view.ViewPager android:id="@+id/mPager" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="1" android:background="@color/white" /> 

Приложение отлично работает, но я не могу изменить цвет текста вкладок …

Я сделал приложение, увидев следующий пример:

rudsonlive / Навигационно-Drawer-ViewPager-ActionBarCompat

Как изменить цвет текста текста вкладок?

благодаря !!!

1) Прежде всего создайте папку цвета под res (/ res / color)
2) создать xml-файл selector.xml под папкой / res / color

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@android:color/white" /> <item android:state_focused="true" android:color="@android:color/white" /> <item android:state_pressed="true" android:color="@android:color/white" /> <item android:color="#504f4f" /> </selector> 

3) Затем в методе populateTabStrip () в SlidingTabLayout поместите это

 tabTitleView.setTextColor(getResources().getColorStateList(R.color.selector)); 

Теперь у вас есть селектор, и вы можете изменить цвет текста на любом событии, которое вы хотите

Если это не работает, добавьте следующие строки кода.
A) в методе populateTabStrip () в конце добавить это

 if (i == mViewPager.getCurrentItem()) { tabView.setSelected(true); } 

И b) изменить метод onPageSelected () на это

  @Override public void onPageSelected(int position) { if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { mTabStrip.onViewPagerPageChanged(position, 0f); scrollToTab(position, 0); } for (int i = 0; i < mTabStrip.getChildCount(); i++) { mTabStrip.getChildAt(i).setSelected(position == i); } if (mViewPagerPageChangeListener != null) { mViewPagerPageChangeListener.onPageSelected(position); } } 

Откройте файл SlidingTabLayout.java (по умолчанию один из Google IO) и найдите функцию populateTabStrip() , после этого кода

 mTabStrip.addView(tabView); if (i == mViewPager.getCurrentItem()) { tabView.setSelected(true); } 

Добавьте следующую строку:

 int color = ContextCompat.getColor(tabView.getContext(), R.color.grey); tabTitleView.setTextColor(color); 

Замените R.color.grey вашим предпочтительным цветом.

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

 tabTitleView.setTextColor(getResources().getColor(R.color.white)); 

В моем классе TextView был tabTitleView. Если вы используете пример по умолчанию, предоставленный Google, вы найдете его в функции populateTabStrip.

Скопируйте код slidetablayout и slidetabstrip и поместите его в файл java. Затем создайте файл customtab_title.xml в папке макета и файл selector.xml в вашей папке с возможностью переноса. `

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dp" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:textColor="@drawable/slidingtab_title_color"/> </LinearLayout> 

selector.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@color/unpressed" /> <item android:state_focused="true" android:color="@color/unpressed" /> <item android:state_pressed="true" android:color="@color/unpressed" /> <item android:color="@android:color/black" /> </selector> 

И в вашем mainactivity или где ur, показывающий ваши вкладки, добавляет одну строку кода – tabs.setCustomTabView (R.layout.customtab_title, R.id.textView2);

Здесь вкладки – скользящие табуляции;

Для изменения цвета индикатора add-tabs.setSelectedIndicatorColors (getResources (). GetColor (R.color.unpressed));

  @Override public void onPageSelected(int position) { for (int i = 0; i < mTabStrip.getChildCount(); i++) { TextView tv = (TextView) mTabStrip.getChildAt(i); if (i==position) tv.setTextColor(getResources().getColorStateList(R.color.white)); else tv.setTextColor(getResources().getColorStateList(R.color.tab_text_color)); } 

Это может помочь вам

К сожалению, этот класс не поддерживает настройку цвета текста вкладки без редактирования кода и всегда использует цвет текста по умолчанию для темы. Вам нужно будет исправить класс, чтобы разрешить настройку цвета текста вкладок по коду или атрибуту стиля. Один из вариантов – использовать библиотеку PagerSlidingTabStrip .

Посмотрите на код для SlidingTabLayout … Вы можете настроить пользовательский вид табуляции, который позволяет вам управлять содержимым вкладки и устанавливать цвет текста пользовательской вкладки. Посмотрите на slideTabLayout.setCustomTabView (int layoutResId, int textViewId).

Я использую решение Panayiotis Irakleous, но я думаю, что лучше избегать цикла в процедуре onPageSelected.

Шаги те же, вам нужно добавить член класса int (пример: mCurrentTabIndex ), чтобы сохранить текущий индекс вкладки.

В шагах 3.a вам нужно добавить

 mCurrentTabIndex = i; 

Так будет:

 if (i == mViewPager.getCurrentItem()) { tabView.setSelected(true); mCurrentTabIndex = i; } 

Наконец, в шагах 3.b замените часть цикла на это:

 mTabStrip.getChildAt(mCurrentTabIndex).setSelected(false); mTabStrip.getChildAt(position).setSelected(true); mCurrentTabIndex = position; 

Таким образом, код будет выглядеть следующим образом:

 @Override public void onPageSelected(int position) { if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { mTabStrip.onViewPagerPageChanged(position, 0f); scrollToTab(position, 0); } mTabStrip.getChildAt(mCurrentTabIndex).setSelected(false); mTabStrip.getChildAt(position).setSelected(true); mCurrentTabIndex = position; if (mViewPagerPageChangeListener != null) { mViewPagerPageChangeListener.onPageSelected(position); } }