24

我正在尝试使用 SherlockActionBar 实现 ViewPagerIndicator。它有效:我可以滑动片段,但样式不起作用!

它看起来像这样:

图像

相关主题: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 设置样式吗?谢谢!

编辑:现在我添加了

<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 当前页面的屏幕截图,带有样式:

图像

4

2 回答 2

36

为了查看 Fragments,您必须以某种方式扩展 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 个项目声明。

于 2012-03-16T12:57:21.533 回答
5

添加样式时,我不小心删除了 android:layout_weight="1" 。

所以对于其他想要用 ABS 实现 VPI 的人:

布局.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>

样式.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

于 2012-03-19T15:53:40.093 回答