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

4

2 に答える 2

36

フラグメントを表示するには、Androidの基本テーマをなんらかの方法で拡張する必要があります。ViewPagerIndicatorを表示するには、これらのスタイル定義を何らかの方法で含める必要があります。答えは、ActionBarSherlock-theme(Androidの基本テーマを拡張する)を拡張し、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>

4つの「vpi...」スタイルすべてを含める必要はないことに注意してください。使用するものだけを含める必要があります。たとえば、CirclePageIndicatorのみを使用している場合は<item name="vpiCirclePageIndicatorStyle">...</item>、他の3つのアイテム宣言を含めるだけで、除外できます。

于 2012-03-16T12:57:21.533 に答える
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

于 2012-03-19T15:53:40.093 に答える