Подтвердить что ты не робот

Нет стиля ViewPagerIndicator в сочетании с SherlockActionBar

Я пытаюсь реализовать ViewPagerIndicator с помощью SherlockActionBar. Он работает: я могу сдвигать фрагменты, но стиль не работает!

Он выглядит следующим образом:

img

родственная тема: https://github.com/JakeWharton/Android-ViewPagerIndicator/issues/66

Я знаю, что происходит не так: В образце VPI стиль страницы задается в AndroidManifest.xml(например)

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

Но когда я добавляю этот элемент android: theme в свой собственный Manifest.xml, я получаю следующее исключение:

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.

Я также попытался скопировать всю информацию стиля в styles.xml, но это также не работает.

Можете ли вы рассказать мне, как установить стиль для VPI? Спасибо!

EDIT: Теперь я добавил

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

в мой Manifest.xml

и следующий стиль в 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>

Результат: у меня нет исключения, см. стиль, но теперь я не вижу никаких фрагментов: (

Код действия можно найти здесь: http://pastebin.com/hsNgxFDZ Снимок экрана текущей страницы со стилем:

img

4b9b3361

Ответ 1

Чтобы увидеть фрагменты, вам нужно как-то расширить базовую тему Android. Чтобы увидеть ViewPagerIndicator, вам нужно каким-то образом включить эти определения стиля. Ответ заключается в создании вашей собственной темы, которая расширяет тему ActionBarSherlock (которая расширяет базовые темы Android) и реализует стили ViewPagerIndicator.

Пример:

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

Затем в вашем манифесте установите android:theme="@style/myTheme" в <application> или на <activity> s.

Обратите внимание, что вам не нужно включать все 4 "vpi..." - стили; вам нужно включить только те, которые вы используете. Например. если вы используете только CirclePageIndicator, вам нужно включить <item name="vpiCirclePageIndicatorStyle">...</item> и не учитывать остальные 3 объявления.

Ответ 2

Я случайно удалил android: layout_weight = "1" при добавлении стилей.

Итак, для других, кто хочет реализовать VPI с 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>

Спасибо @Reinier!: D