Как изменить цвет текста в 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/Navigation-Drawer-ViewPager-ActionBarCompat
Как изменить цвет текста текста вкладок?
спасибо!!!
Ответы
Ответ 1
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);
}
}
Ответ 2
Откройте файл 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
на ваш предпочтительный цвет.
Ответ 3
Вы должны уметь видеть TextView, который использует класс.
tabTitleView.setTextColor(getResources().getColor(R.color.white));
В моем классе TextView был tabTitleView. Если вы используете пример по умолчанию, предоставленный Google, вы найдете его в функции populateTabStrip.
Ответ 4
скопируйте код 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 или где u r, показывающий ваши вкладки, добавьте одну строку кода - tabs.setCustomTabView(R.layout.customtab_title, R.id.textView2);
здесь вкладки являются скользящими вкладками,
изменить цвет индикатора -
tabs.setSelectedIndicatorColors(GetResources() GetColor (R.color.unpressed).);
Ответ 5
@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));
}
это может помочь вам
Ответ 6
К сожалению, этот класс не поддерживает настройку цвета текста вкладки без редактирования кода и всегда использует цвет текста по умолчанию для темы. Вам придется исправить класс, чтобы разрешить настройку цвета текста вкладок по коду или атрибуту стиля.
Один из вариантов заключается в использовании библиотеки PagerSlidingTabStrip.
Ответ 7
Глядя на код для SlidingTabLayout... Вы можете настроить собственное представление табуляции, которое позволяет вам управлять содержимым вкладки и устанавливать цвет текста пользовательской вкладки. Посмотрите на slideTabLayout.setCustomTabView(int layoutResId, int textViewId).
Ответ 8
Я использую решение 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);
}
}