Я сделал приложение, которое использует 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); } }