24

Sto cercando di implementare ViewPagerIndicator con SherlockActionBar. Funziona: posso far scorrere i frammenti, ma lo stile non funziona!Nessuno stile ViewPagerIndicator in combinazione con SherlockActionBar

Ecco come si presenta:

img

argomento correlato: https://github.com/JakeWharton/Android-ViewPagerIndicator/issues/66

So cosa sta andando male: Nel campione di VPI, lo stile di una pagina si trova in AndroidManifest.xml da (per esempio)

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

Ma quando aggiungo quell'androide: elemento tematico al mio Manifes t.xml ottengo la seguente eccezione:

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. 

Ho anche provato a copiare tutto lo stile-informazione a styles.xml, ma che anche non funziona.

Puoi dirmi come impostare uno stile per il VPI? Grazie!

EDIT: Ora ho aggiunto

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

alla mia Manifest.xml

e il seguente stile in styles.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> 

Risultato: Non capisco qualsiasi eccezione, vedere lo stile, ma ora non riesco a vedere alcun frammento :(

Il codice delle attività può essere trovato qui: http://pastebin.com/hsNgxFDZ schermata pagina corrente con stile:

img

risposta

36

Per vedere i frammenti, si dovrà estendere in qualche modo una base-tema Android. Per vedere ViewPagerIndicator, dovrai in qualche modo includere quelle definizioni di stile. La risposta è creare un tema personale che estenda il tema ActionBarSherlock (che estende i temi base di Android) e implementa gli stili di ViewPagerIndicator.

Esempio:

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

Poi, nel tuo manifesto, impostare android:theme="@style/myTheme" al <application> o ai vostri <activity> s.

Nota che non è necessario includere tutti i 4 "vpi ..." - stili; devi solo includere quelli che usi. Per esempio. se utilizzi solo CirclePageIndicator, devi includere solo <item name="vpiCirclePageIndicatorStyle">...</item> e puoi escludere le altre 3 dichiarazioni di articoli.

+0

Beh, questo è esattamente ciò che ho descritto nel mio primo post! Theme.BataApp ha come tema Theme.Sherlock genitore ... Ma non riesco ancora a visualizzare i miei frammenti (li vedo senza gli stili aggiuntivi) – user1255553

+0

Ho inserito il codice Attività qui: http: //pastebin.com/hsNgxFDZ – user1255553

+0

I tuoi 'Framment's vengono chiamati? Hai provato a impostare 'android: layout_height =" 0dp "' e 'android: layout_weight =" 1 "' sul tuo 'ViewPager'? Potresti postare l'XML del tuo layout? – Reinier

5

Ho rimosso per errore Android: layout_weight = "1" quando si aggiungono stili.

Così, per altri che vogliono implementare VPI con ABS:

layout.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> 

styles.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> 

Grazie @Reinier! : D

+0

puoi spiegare che cosa significa "ecc." significare? Sto avendo problemi nel compilare questo codice - continua a dire "Nessuna risorsa trovata che fa il nome" – pzo