wake-up-neo.com

Wie kann man die Textfarbe von SlidingTabLayout ändern?

Ich habe eine Anwendung erstellt, die ActionBarCompat verwendet. 

Ich habe die Registerkarten mit der Klasse SlidingTabLayout erstellt.

die Klasse ist diese:

SlidingTabLayout.Java

aber ich kann die Farbe der Registerkarten nicht ändern ...

mein Viewpager-Fragment lautet wie folgt:

<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" />

die Anwendung funktioniert gut, aber ich kann den Farbtext der Registerkarten nicht ändern ...

Ich habe den Antrag gemacht, nachdem ich folgendes Beispiel gesehen hatte:

rudsonlive/Navigation-Drawer-ViewPager-ActionBarCompat

Wie kann ich die Textfarbe des Registers ändern? 

vielen Dank !!!

25
seba123neo

1) Erstellen Sie zunächst einen Farbordner unter res (/ res/color)
2) Erstellen Sie die XML-Datei selector.xml im Ordner/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) Dann in der populateTabStrip () -Methode in SlidingTabLayout diese einfügen

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

jetzt haben Sie eine Auswahl und können die Farbe des Texts für jedes gewünschte Ereignis ändern

wenn dies nicht funktioniert, fügen Sie die folgenden Codezeilen hinzu.
a) Fügen Sie dies in der populateTabStrip () - Methode am Ende hinzu 

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

und b) ändern Sie die onPageSelected () -Methode darauf 

    @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

Öffnen Sie Ihre Datei SlidingTabLayout.Java (die Standarddatei von Google IO) und suchen Sie nach der Funktion populateTabStrip() nach diesem Code 

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

füge folgende Zeile hinzu:

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

Ersetzen Sie R.color.grey durch Ihre bevorzugte Farbe.

14
TheOddAbhi

Sie sollten das von der Klasse verwendete TextView sehen können.

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

In meiner Klasse war das TextView tabTitleView. Wenn Sie das von Google bereitgestellte Standardbeispiel verwenden, finden Sie es unter populateTabStrip-Funktion.

4
MrLithid

kopieren Sie den Code von slidingtablayout und slidingtabstrip und fügen Sie ihn in eine Java-Datei ein. Erstellen Sie dann eine customtab_title.xml in Ihrem Layoutordner und eine selector.xml-Datei in Ihrem Zeichenordner . ` 

<?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> 

Fügen Sie in Ihrer Hauptaktivität oder bei der Anzeige Ihrer Registerkarten eine Zeile Code hinzu - tabs.setCustomTabView (R.layout.customtab_title, R.id.textView2);

hier sind Registerkarten gleitfähig.

indikatorfarbe ändern add - 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));

        }

das kann dir helfen

2
Vinod Ranga

Leider unterstützt diese Klasse das Anpassen der Tab-Textfarbe nicht, ohne den Code zu bearbeiten, und verwendet immer die Standardtextfarbe des Designs. Sie müssen die Klasse patchen, um die Textfarbe der Registerkarten nach Code oder nach Stilattribut .. zu definieren. Eine Alternative ist die Verwendung der Bibliothek PagerSlidingTabStrip .

1
BladeCoder

Ich verwende die Panayiotis Irakleous-Lösung, aber ich denke, es ist besser, einen Teil der onPageSelected-Prozedur zu vermeiden. 

Die Schritte sind die gleichen. Sie müssen einen int-Klassenmitglied hinzufügen (Beispiel: mCurrentTabIndex), um den aktuellen Index der Registerkarte zu speichern.

In den Schritten 3.a müssen Sie hinzufügen 

mCurrentTabIndex = i;

So wird es so sein:

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

Ersetzen Sie als letztes in Schritt 3.b den Schleifenteil folgendermaßen:

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

Der Code wird also so sein:

@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

Anzeigen des Codes für das SlidingTabLayout ... Sie können eine benutzerdefinierte Registerkartenansicht festlegen, in der Sie den Inhalt der Registerkarte steuern und eine benutzerdefinierte Registertextfarbe festlegen können. Schauen Sie sich das SlideTabLayout.setCustomTabView (int layoutResId, int textViewId) an.

0
simplatek