我正在尝试使用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 带有样式的当前页面的屏幕截图:
答案 0 :(得分:36)
要查看片段,您必须以某种方式扩展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>
。
请注意,您不必包含所有4个“vpi ...” - 样式;你只需要包括你使用的那些。例如。如果您只使用CirclePageIndicator,则只需要包含<item name="vpiCirclePageIndicatorStyle">...</item>
,并且可以省略其他3项声明。
答案 1 :(得分: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