2012-08-08 38 views
16

En lugar de explicar la cuestión, mucho más fácil si sólo te muestro:El estilo predeterminado falla para el TabPageIndicator de ViewPagerIndicator. ¿Por qué y cómo solucionarlo?

Unstyled Tab Titles

Como se puede ver los títulos de las fichas están aplastados juntos y completamente sin estilo. Funcionan correctamente al pasar por las pestañas de los interruptores (aunque no hay indicación visible, excepto cuando se cambia de posición, según corresponda) y al tocar una pestaña, cambia la vista, pero falta todo el estilo. Aquí está el código:

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

Eso es todo. Ahora, a menos que esté muy confundido a pesar de leer la documentación y examinar las muestras, no debería tener que tomar pasos adicionales para usar el estilo predeterminado. Estoy un poco perdido.

Respuesta

11

Me siento como un idiota, pero aquí está la solución extremadamente simple y obvia.

AndroidManifest.xml

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

Sí, todo lo que tenía que hacer era en realidad uso el tema. Espero que esto ayude a otros pobres pobres a perder el alma.

+0

Agggh, ¡tenía esta pestaña abierta pero nunca la leí! Finalmente me imaginé el tema, pero podría haber ahorrado tiempo. – georgiecasey

27

Tengo el mismo problema, pero android:theme="@style/Theme.PageIndicatorDefaults" no se combina con el tema de mi aplicación.

Hay otra forma de personalizar, sobrescribiendo res/values/style.xml:

<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

En realidad, me encontré con un problema similar e hice algo similar. Quería usar el tema holo cuando estuviera disponible, así que necesitaba crear otra carpeta res/values-v11 con un style.xml donde estableciera parent = "Theme.Holo" que en su caso sería "Theme.Holo.Light" . –

+1

¡Muchas gracias por esto! Es horrible cuánto tiempo se necesita para descubrir cómo hacer que ViewPagerIndicator funcione y cómo personalizarlo ... Si no fuera por StackOverflow y ustedes, probaría y me equivocaría hasta la muerte. – Terry

5

Una pequeña adición a la solución de Michaels: en caso de que esté usando un tema personalizado para su actividad ya, basta con añadir theese dos líneas a la misma:

<item name="vpiIconPageIndicatorStyle">@style/Widget.IconPageIndicator</item> 
<item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item> 
Cuestiones relacionadas