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ベーステーマを拡張する必要があります。ViewPagerIndicatorを表示するには、何らかの方法でそれらのスタイル定義を含める必要があります。答えActionBarSherlock-theme(Android base-themes)を拡張し、ViewPagerIndicator-stylesを実装する)を拡張する独自のテーマを作成することです。
例:
<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つのアイテム宣言を省略できます。
スタイルを追加するときに誤って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