Ich habe eine Anwendung erstellt, die ActionBarCompat verwendet.
Ich habe die Registerkarten mit der Klasse SlidingTabLayout erstellt.
die Klasse ist diese:
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 !!!
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);
}
}
Ö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.
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.
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));
@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
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 .
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);
}
}
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.