与SherlockActionBar搭配使用的ViewPagerIndicator没有样式

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

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设置样式吗? 谢谢! 编辑: 现在我已经添加了
<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

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>

在你的Manifest文件中,将android:theme="@style/myTheme"设置为<application>或者你的<activity>

注意,你不必包含所有4个“vpi…”样式;你只需要包含你使用的那些即可。比如,如果你只使用CirclePageIndicator,那么你只需要包含<item name="vpiCirclePageIndicatorStyle">...</item>,而其他三个item声明可以省略。


你的“Fragment”是否被调用了?你尝试在“ViewPager”上设置“android:layout_height =“0dp””和“android:layout_weight =“1””了吗?你能发布一下你布局的XML吗? - Reinier
非常感谢!我不小心从XML中删除了android:layout_weight="1" :$ - user1255553
哈哈! :) 是否可以使用SherlockActionBar中指定的样式?我非常喜欢深色标签,并且想要使用一个“集中式”的样式。但是这个不起作用:<style name="myTabPageIndicator" parent="Widget.TabPageIndicator"> <item name="android:background">@drawable/abs__tab_indicator_holo</item> </style> - user1255553
我不确定你所说的“暗标签”是什么意思。如果要更改蓝色,您需要创建自己的可绘制对象并设置<item name="android:background">@drawable/my_tab_indicator</item>。如果您只想更改选项卡的背景颜色,请将背景设置为ViewPagerIndicator本身。 - Reinier
4
最新版本中没有 vpiTabTextStyle,而是使用 TextAppearance.TabPageIndicator 样式的一部分,代替了 android:textSizeandroid:textColor - pingw33n
显示剩余3条评论

5

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

因此,对于那些想要使用 ABS 实现 VPI 的人:

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

你能解释一下 "etc." 是什么意思吗?我在编译这段代码时遇到了问题 - 一直提示“找不到与给定名称匹配的资源”。 - pzo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接