Нет стиля 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]()
Ответы
Ответ 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