2012-08-08 14 views
16

Yerine Sadece göstersem daha kolay sorunu açıklama:Varsayılan Stil ViewPagerIndicator'ın TabPageIndicator için başarısız. Neden ve Nasıl Düzeltilir?

Unstyled Tab Titles

Gördüğünüz gibi sekme başlıkları hep birlikte ve tamamen stillendirilmemiş püre edilir. Anahtarlar sekmelerinden hızlıca kaydırarak çalışırlar (ancak uygun olduğunda konum kaydırma dışında görünür bir gösterge yoktur) ve bir sekmeye dokunmak görünümü değiştirir, ancak tüm stil eksiktir.

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 bu kadar

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

: İşte kodudur. Şimdi, belgeleri okumanıza ve örnekleri incelemeye rağmen kafam çok karışık olmadıkça, varsayılan stili kullanmak için fazladan adımlar atmamalıyım. Biraz kaybettim.

cevap

11

Biraz moron hissediyorum, ama burada son derece basit ve açık bir çözüm. AndroidManifest.xml

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

Evet

, yapmam gereken tüm aslında kullanım konu oldu. Umarım bu, diğer bazı kayıp kayıp ruhlara yardımcı olur.

+0

Agggh, Bu sekmeyi açtım ama asla okuma! Sonunda kendimi temalı buldum ama zaman kazandırabilirdi. – georgiecasey

27

Aynı sorunu yaşıyorum, ancak android:theme="@style/Theme.PageIndicatorDefaults" uygulama temamla birleştirmiyor.

<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

Aslında benzer bir soruna rastladım ve benzer bir şey yaptım. Kullanılabilir holo temasını kullanmak istedim, bu yüzden bir style.xml dosyası ile bir başka res/values-v11 klasörü oluşturmam gerekiyordu; burada = "Theme.Holo" ifadesini kullanacağım ve burada da "Theme.Holo.Light" olacaktır. . –

+1

Bunun için çok teşekkürler! ViewPagerIndicator'ın nasıl çalıştığını ve nasıl özelleştirileceğini anlamak için ne kadar zaman harcıyor ... StackOverflow için olmasaydı ve sizler de, kendimi ölüme mahkum ettim. – Terry

5

Michaels çözümüne küçük bir ek: durumunda zaten Etkinlik için özel bir tema kullanıyorsanız, sadece kendisine Postadölesan iki satırı ekleyin:

res/values/style.xml üzerine yazarak kişiselleştirmek için başka bir yolu yoktur

<item name="vpiIconPageIndicatorStyle">@style/Widget.IconPageIndicator</item> 
<item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item> 
İlgili konular