8

Tôi nhận thấy với phiên bản ViewPagerIndicator mới nhất, ngăn chia kiểu ICS được hỗ trợ, tôi đã cố gắng theo dõi vấn đề và giải pháp, nhưng tôi không thể chia bộ chia hiển thị trên các tùy chọn của tôi trên thanh tác vụ cho TitlePageIndicator. Tôi đã thêm IcsLayout làm vùng chứa, đặt dải phân cách, bộ hiển thị và các thuộc tính khác, nhưng vẫn không nhận được gì. Dưới đây là cách bố trí của tôi (kỳ quặc đủ, nếu tôi chuyển đổi các IcsLayout để chỉ số ViewPager một, treo ứng dụng):Dải phân cách không hoạt động đối với TitlePageIndicator với viewpagerindicator & actionbarsherlock

<com.actionbarsherlock.internal.widget.IcsLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res/com.sosick.android.brink" 
    android:layout_width="match_parent" 
    android:divider="#ffffff" 
    android:showDividers="middle" 
    android:dividerPadding="8dp" 
    android:dividerHeight="10dp" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <com.viewpagerindicator.TitlePageIndicator 
     android:id="@+id/tpi_header" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     textColor="@color/text_light" 
     android:background="@drawable/ab_stacked_solid_brink" 
     app:topPadding="10dp" 
     app:footerPadding="15dp" 
     app:footerColor="#a4ded7" 
     app:footerIndicatorHeight="2dp" 
     app:footerIndicatorStyle="underline" 
     app:footerLineHeight="2dp" 
     app:selectedBold="false" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/vp_pages" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

</com.actionbarsherlock.internal.widget.IcsLinearLayout> 
+0

Reading trang có vẻ như họ tuyên bố nó làm việc với TabPageIndicator, vì vậy tôi m không chắc chắn nếu nó có thể với TitleIndicator ...? – dariusriggins

+0

Vui lòng đăng một bản phác thảo hoặc một tài liệu tham khảo để tìm hiểu rõ hơn những gì bạn muốn đạt được. Cảm ơn. –

+0

Nếu bạn nhìn vào ứng dụng này, hãy chú ý các ngăn dọc trên Máy nhắn tin Tiêu đề, đó là những gì tôi đang cố gắng đạt được. http://24.media.tumblr.com/8044b5ed0a7f8ad04468def5973275d7/tumblr_mi5ru5f7fZ1r2wjwko1_1280.png – dariusriggins

Trả lời

4

Bạn cần khai báo thông số chia theo kiểu, thay vì trong bố cục xml.

../res/values/styles.xml:

<style name="StyledIndicators" parent="@android:style/Theme.Light"> 
    <item name="vpiIconPageIndicatorStyle">@style/CustomIconIndicator</item> 
</style> 

<style name="CustomIconIndicator" parent="Widget.TabPageIndicator"> 
    <item name="android:divider">@drawable/custom_tab_indicator_divider</item> 
    <item name="android:showDividers">middle</item> 
    <item name="android:dividerPadding">10dp</item> 
</style> 

Trong manifest cho hoạt động của bạn:

<activity 
     android:name=".SampleIconsDefault" 
     android:label="Icons/Default" 
     android:theme="@style/StyledIndicators"> 
</activity> 
+0

giải pháp này yêu cầu cấp API 11, có cách nào khác hoạt động cho API cấp 8 không? –

0

Tiếp theo đoạn mã là mainlyfrom Android Developer trang web. Ngoài ra còn có một ứng dụng/dự án ví dụ rất tốt.

Sử dụng ViewPage làm vùng chứa cho bố cục của bạn, ví dụ: res/layout/activity_main.xml:

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

Thực hiện ABS' ActionBar.TabListener trong lớp học của bạn, thêm và mở rộng FragmentPagerAdapter hoặc FragmentStatePagerAdapter từ hỗ trợ thư viện ví dụ .:

public class TheDesertFoxActivity extends SherlockFragmentActivity 
     implements ActionBar.TabListener { 

    private AppSectionsPagerAdapter mAppSectionsPagerAdapter; 
    private ViewPager mViewPager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager()); 

     // Set up action bar 
     final ActionBar actionBar = getSupportActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // Set up the ViewPager, attaching the adapter 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mAppSectionsPagerAdapter); 
     mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       // When swiping between different app sections, select the corresponding tab 
       actionBar.setSelectedNavigationItem(position); 
      } 
     }); 

     // For each of the sections in the app, add a tab to the action bar 
     for (int i = 0; i < mAppSectionsPagerAdapter.getCount(); i++) { 
      // Create a tab with text corresponding to the page title defined by the adapter. 
      // Also specify this Activity object, which implements the TabListener interface, as the 
      // listener for when this tab is selected. 
      actionBar.addTab(actionBar.newTab() 
        .setText(mAppSectionsPagerAdapter.getPageTitle(i)) 
        .setTabListener(this)); 
     } 
    } 

    public static class AppSectionsPagerAdapter extends FragmentPagerAdapter { 

     public AppSectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int i) { 
      switch (i) { 

       Fragment fragment = new MyTabsFragment(); 
       Bundle args = new Bundle(); 
       args.putInt(MyTabsFragment.TAB_ID, i); 
       fragment.setArguments(args); 
       return fragment; 
      } 
     } 

     @Override 
     public int getCount() { 
      return <YOUR_TAB_COUNT>; 
     } 
    } 

    public static class MyTabsFragment extends Fragment { 

     public static final String TAB_ID = "tab_id"; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      int layoutId = -1; 
      switch (getArguments(getInt(TAB_ID))) { 
       case 0: 
        layoutId = R.layout.fragment_first_tab; 
        break; 
       case 1: 
        layoutId = R.layout.fragment_second_tab; 
        break; 
       ... 
       ... 
       ... 
       default: 
        layoutId = R.layout.fragment_default_tab; 

      } 
      View rootView = inflater.inflate(layoutId, container, false); 
      return rootView; 
     } 
    } 
} 

Vậy là xong. Bộ chia sẽ được đặt bởi ViewPager cho bạn. Bạn không phải tự thêm chúng.

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