it-swarm.com.ru

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

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

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

класс такой:

SlidingTabLayout.Java

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

мой фрагмент окна просмотра выглядит так:

<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

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

спасибо !!!

25
seba123neo

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);
}

и б) изменить метод 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);
        }
    }    
45
Panayiotis Irakleous

Откройте свой файл 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 на предпочитаемый вами цвет.

14
TheOddAbhi

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

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

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

4
MrLithid

скопируйте код 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> 

А в своей основной деятельности или там, где вы видите свои вкладки, добавьте одну строку кода - tabs.setCustomTabView (R.layout.customtab_title, R.id.textView2);

здесь вкладки - это скользящие вкладки;

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

4
Sniper
   @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));

        }

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

2
Vinod Ranga

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

1
BladeCoder

Я использую решение 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);
    }
}    
0
saggaf.arsyad

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

0
simplatek