2012-03-16 22 views
24

Tôi đang cố gắng triển khai ViewPagerIndicator với SherlockActionBar. Nó hoạt động: Tôi có thể trượt các mảnh, nhưng phong cách không hoạt động!Không có kiểu ViewPagerIndicator kết hợp với SherlockActionBar

Nó trông như thế này:

img

chủ đề liên quan: https://github.com/JakeWharton/Android-ViewPagerIndicator/issues/66

Tôi biết những gì đang xảy ra sai: Trong mẫu của VPI, phong cách của một trang được đặt trong AndroidManifest.xml bởi (ví dụ)

<activity 
    android:name=".SampleTabsDefault" 
    android:theme="@style/Theme.PageIndicatorDefaults"> 
</activity> 

Nhưng khi tôi thêm yếu tố android: chủ đề đó vào các Manifes của riêng tôi t.xml Tôi nhận được ngoại lệ sau:

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. 

Tôi cũng đã cố gắng sao chép tất cả thông tin kiểu thành styles.xml, nhưng điều đó cũng không hiệu quả.

Bạn có thể cho tôi biết cách đặt kiểu cho VPI không? Cảm ơn bạn!

EDIT: Bây giờ tôi đã thêm

<activity 
     android:name=".SampleTabsDefault" 
     android:theme="@style/StyledIndicators"> 
</activity> 

để manifest.xml tôi

và phong cách sau đây trong 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> 

Kết quả: Tôi không nhận được bất kỳ Ngoại lệ nào, hãy xem phong cách, nhưng bây giờ tôi không thể thấy bất kỳ đoạn nào: (

Mã của hoạt động này có thể được tìm thấy ở đây: http://pastebin.com/hsNgxFDZ Ảnh chụp màn hình của trang hiện tại với phong cách:

img

Trả lời

36

Để xem các mảnh vỡ, bạn sẽ phải bằng cách nào đó mở rộng một căn cứ-chủ đề Android. Để xem ViewPagerIndicator, bạn sẽ phải bằng cách nào đó bao gồm các định nghĩa kiểu đó. Câu trả lời là tạo chủ đề của riêng bạn mở rộng chủ đề ActionBarSherlock (mở rộng các chủ đề cơ bản của Android) và triển khai các kiểu ViewPagerIndicator.

Ví dụ:

<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> 

Sau đó, trong Manifest của bạn, thiết lập android:theme="@style/myTheme" đến <application> hoặc <activity> của bạn.

Lưu ý rằng bạn không phải bao gồm tất cả 4 "vpi ..." - kiểu; bạn chỉ phải bao gồm những người mà bạn sử dụng. Ví dụ. nếu bạn chỉ sử dụng CirclePageIndicator, bạn chỉ phải bao gồm <item name="vpiCirclePageIndicatorStyle">...</item> và có thể bỏ qua 3 tờ khai khác.

+0

Vâng, đó chính xác là những gì tôi đã mô tả trong bài đăng đầu tiên của mình! Theme.BataApp có dạng Theme.Sherlock giống như cha mẹ ... Nhưng tôi vẫn không thể nhìn thấy những mảnh vỡ của mình hiển thị (tôi có thể nhìn thấy chúng mà không có kiểu phụ) – user1255553

+0

Tôi đã đặt Mã hoạt động ở đây: http: //pastebin.com/hsNgxFDZ – user1255553

+0

Bạn có nhận được 'Fragment's '? Bạn đã thử đặt 'android: layout_height =" 0dp "' và 'android: layout_weight =" 1 "' trên 'ViewPager' của bạn? Bạn có thể đăng XML của bố cục của mình không? – Reinier

5

Tôi vô tình xóa android: layout_weight = "1" khi thêm kiểu.

Vì vậy, đối với những người khác muốn triển khai VPI với ABS:

bố cục.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> 

Cảm ơn bạn @Reinier! : D

+0

bạn có thể giải thích những từ "v.v" không? nghĩa là? Tôi đang gặp sự cố khi biên dịch mã này - tiếp tục nói "Không tìm thấy tài nguyên nào có tên cho máy" – pzo

Các vấn đề liên quan