2012-08-08 4 views
16

Anstatt das Problem zu erklären, viel einfacher, wenn ich Ihnen zeigen:Der Standardstil schlägt für den TabPageIndicator des ViewPagerIndicator fehl. Warum und wie zu beheben?

Unstyled Tab Titles

Wie Sie die Registerkarte Titel sind alle sehen können, zusammen und ganz ungeschminkt püriert. Sie funktionieren korrekt, indem sie durch die Schalter-Registerkarten wischen (obwohl es keine sichtbaren Anzeichen gibt, außer Positionsverschiebungen, wo es angebracht ist) und tippen auf eine Registerkarte, um die Ansicht zu wechseln, aber alle Stile fehlen. Hier ist der Code:

gallerylists.xml

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <com.viewpagerindicator.TabPageIndicator 
    android:id="@+id/indicator" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

    <android.support.v4.view.ViewPager 
    android:id="@+id/gallerypager" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" /> 

</LinearLayout> 

GalleryLists.java

public class GalleryLists extends Activity { 
    Context context; 

    private static final String[] titles = new String[] { 
     "20 Hottest", "20 Worst", "20 Awesomest", "MMA", "Comedy", "Moto", "Games" }; 

    ViewPager listPager; 
    ListPagerAdapter listPagerAdapter; 

    PageIndicator indicator; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gallerylists); 

    context = this; 

    listPagerAdapter = new ListPagerAdapter(); 

    ViewPager.OnPageChangeListener changeListener = new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageScrolled(int i, float v, int i1) {} 

     @Override 
     public void onPageSelected(int i) {} 

     @Override 
     public void onPageScrollStateChanged(int i) {} 
    }; 

    listPager = (ViewPager) findViewById(R.id.gallerypager); 
    listPager.setAdapter(listPagerAdapter); 
    listPager.setOnPageChangeListener(changeListener); 

    indicator = (TabPageIndicator) findViewById(R.id.indicator); 
    indicator.setViewPager(listPager); 
    indicator.setOnPageChangeListener(changeListener); 
    } 

    private class ListPagerAdapter extends PagerAdapter { 

    // Not important (I believe) 
    } 
} 

Das ist es. Nun, wenn ich nicht sehr verwirrt bin, obwohl ich die Dokumentation gelesen und die Beispiele untersucht habe, sollte ich keine zusätzlichen Schritte unternehmen müssen, um den Standard-Stil zu verwenden. Ich bin etwas verloren.

Antwort

11

Ich fühle mich wie ein Idiot, aber hier ist die äußerst einfache und offensichtliche Lösung.

AndroidManifest.xml

... 
<activity 
    android:name=".GalleryLists" 
    android:theme="@style/Theme.PageIndicatorDefaults" 
    ... > 
</activity> 
... 

Ja, alles, was ich tun musste, war eigentlich Verwendung das Thema. Hoffentlich hilft das einer anderen armen verlorenen Seele.

+0

Agggh, ich hatte diese Registerkarte geöffnet, aber nie gelesen! Endlich dachte ich mir, dass ich mich selbst auskannte, aber hätte Zeit sparen können. – georgiecasey

27

Ich habe das gleiche Problem, aber nicht mit meinem App-Thema kombinieren.

gibt es eine andere Art und Weise, res/values/style.xml Überschreiben zu personalisieren:

<resources> 

    <style name="AppTheme" parent="android:Theme.Light" > 
     <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item> 

    </style> 

    <style name="CustomTabPageIndicator" > 
     <item name="android:gravity">center</item> 
     <item name="android:background">@drawable/vpi__tab_indicator</item>   
     <item name="android:paddingTop">12dp</item> 
     <item name="android:paddingBottom">12dp</item> 
     <item name="android:textAppearance">@style/TextAppearance.TabPageIndicator</item> 
     <item name="android:textSize">15sp</item> 
     <item name="android:maxLines">1</item> 
     <item name="android:textColor">#FF555555</item> 
    </style> 
</resources> 
+1

Ich bin gerade in ein ähnliches Problem geraten und habe etwas ähnliches gemacht. Ich wollte das Holo-Thema wo verfügbar verwenden, also musste ich einen anderen Ordner res/values-v11 mit einer style.xml erstellen, wo ich den parent = "Theme.Holo" setze, was in deinem Fall "Theme.Holo.Light" wäre. . –

+1

Vielen Dank dafür! Es ist schrecklich, wie viel Zeit es braucht, um herauszufinden, wie man den ViewPagerIndicator-Kram funktioniert und wie man ihn anpasst ... Wenn es nicht für StackOverflow und euch wäre, würde ich mich zu Tode irren. – Terry

5

Ein kleiner Zusatz zu Michaels Lösung: Falls Sie bereits über ein eigenes Thema für Ihre Aktivität verwenden, fügen Sie einfach diesem Fall entweder zwei Zeilen hinzu:

<item name="vpiIconPageIndicatorStyle">@style/Widget.IconPageIndicator</item> 
<item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item> 
Verwandte Themen