【问题标题】:No style ViewPagerIndicator in combination with SherlockActionBar无样式 ViewPagerIndicator 与 SherlockActionBar 结合使用
【发布时间】:2012-03-16 12:19:01
【问题描述】:

我正在尝试使用 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 带有样式的当前页面截图:

【问题讨论】:

    标签: android android-viewpager actionbarsherlock android-theme


    【解决方案1】:

    为了查看 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" 设置为 &lt;application&gt; 或您的 &lt;activity&gt;s。

    请注意,您不必包含所有 4 个“vpi...”样式;你只需要包括你使用的那些。例如。如果您只使用 CirclePageIndicator,则只需包含 &lt;item name="vpiCirclePageIndicatorStyle"&gt;...&lt;/item&gt; 并且可以省略其他 3 个项目声明。

    【讨论】:

    • 嗯,这正是我在第一篇文章中所描述的! Theme.BataApp 具有父样式 Theme.Sherlock ......但是,我仍然看不到我的片段出现(我可以看到它们没有额外的样式)
    • 你的Fragments 有被叫到吗?您是否尝试在您的ViewPager 上设置android:layout_height="0dp" 和android:layout_weight="1"?你能发布你的布局的 XML 吗?
    • 非常感谢!我不小心从 xml 中删除了 android:layout_weight="1" :$
    • 太棒了,我之前在为一个应用程序实现这个时实际上遇到了同样的问题! ;)
    • 最新版本中没有vpiTabTextStyle,android:textSize 和android:textColor 被用作TextAppearance.TabPageIndicator 样式的一部分。
    【解决方案2】:

    我在添加样式时不小心删除了 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

    【讨论】:

    • 你能解释一下那些“等”是什么意思吗?意思是?我在编译此代码时遇到问题 - 一直提示“找不到与给定名称匹配的资源”
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2021-02-05
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多