No style ViewPagerIndicator en combinación con SherlockActionBar


Estoy intentando implementar el ViewPagerIndicator con SherlockActionBar. Funciona: puedo deslizar los fragmentos, pero el estilo no funciona!

Se ve así:

img

Tema Relacionado: https://github.com/JakeWharton/Android-ViewPagerIndicator/issues/66

Sé lo que está pasando mal: En el ejemplo de VPI, el estilo de una página se establece en AndroidManifest.xml by (por ejemplo)

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

Pero cuando añado ese elemento android: theme a mi propio Manifiesto.xml Obtengo la siguiente excepción:

03-16 11:06:24.400: E/AndroidRuntime(483): Caused by: java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative.

También he intentado copiar toda la información de estilo a estilos.xml, pero eso tampoco funciona.

¿Puede decirme cómo establecer un estilo para el VPI? ¡Gracias!

EDITAR: Ahora he añadido

<activity
         android:name=".SampleTabsDefault"
         android:theme="@style/StyledIndicators"> 
</activity>

A mi Manifiesto.xml

Y el siguiente estilo en estilos.xml

<style name="Theme.BataApp" parent="Theme.Sherlock.Light.DarkActionBar">
        <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
        <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    </style>   

    <style name="StyledIndicators" parent="Theme.BataApp">
        <item name="vpiTitlePageIndicatorStyle">@style/Widget.TitlePageIndicator</item>
        <item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item>
        <item name="vpiTabTextStyle">@style/Widget.TabPageIndicator.Text</item>
    </style>

Resultado: No recibo ninguna Excepción, veo el estilo, pero ahora no puedo ver ningún fragmento : (

El código de la actividad puede se puede encontrar aquí: http://pastebin.com/hsNgxFDZ Captura de pantalla de la página actual con estilo:

img

Author: gre_gor, 2012-03-16

2 answers

Para ver los Fragmentos, tendrás que extender de alguna manera un tema base de Android. Para ver el ViewPagerIndicator, tendrás que incluir de alguna manera esas definiciones de estilo. La respuesta es crear tu propio tema que extienda el tema ActionBarSherlock (que extiende los temas base de Android) e implemente los estilos ViewPagerIndicator.

Ejemplo:

<style name="myTheme" parent="@style/Theme.Sherlock">

    <!-- If you want to use the default ViewPagerIndicator-styles, use the following: -->
    <item name="vpiTitlePageIndicatorStyle">@style/Widget.TitlePageIndicator</item>
    <item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item>
    <item name="vpiTabTextStyle">@style/Widget.TabPageIndicator.Text</item>

    <!-- If you want to implement your custom style of CirclePageIndicator, do it like so: -->
    <item name="vpiCirclePageIndicatorStyle">@style/myCirclePageIndicator</item>


    <!-- Put whatever other styles you want to define in your custom theme -->
</style>

<style name="myCirclePageIndicator" parent="Widget.CirclePageIndicator">
    <item name="fillColor">@color/my_custom_circle_indicator_fill_color</item>
</style>

Entonces en tu Manifiesto, pon android:theme="@style/myTheme" a la <application> o a tu <activity>s.

Tenga en cuenta que no tiene que incluye todos los 4 " vpi..."- estilos; solo tienes que incluir los que utilices. Por ejemplo, si solo está utilizando el CirclePageIndicator, solo tiene que incluir <item name="vpiCirclePageIndicatorStyle">...</item> y puede omitir las otras 3 declaraciones de elementos.

 36
Author: Reinier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-16 12:57:21

Eliminé accidentalmente android:layout_weight="1" al agregar estilos.

Así que para otros que quieren implementar VPI con ABS:

Diseño.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_height="wrap_content"
        android:layout_width="fill_parent"
        style="@style/StyledIndicators" />
    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
</LinearLayout>

Estilos.xml:

 <style name="Theme.BataApp" parent="Theme.Sherlock.Light.DarkActionBar">
            etc.
        </style>   

        <style name="StyledIndicators" parent="Theme.BataApp">
            <item name="vpiTitlePageIndicatorStyle">@style/Widget.TitlePageIndicator</item>
            <item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item>
            <item name="vpiTabTextStyle">@style/Widget.TabPageIndicator.Text</item>
        </style>

Gracias @Reinier! : D

 5
Author: user1255553,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-19 15:53:40