当前位置: 代码迷 >> Android >> (转)Android SlidingTabLayout定做分割线和指示条颜色
  详细解决方案

(转)Android SlidingTabLayout定做分割线和指示条颜色

热度:67   发布时间:2016-04-27 22:01:34.0
(转)Android SlidingTabLayout定制分割线和指示条颜色

本文转载与:http://blog.csdn.net/zhangphil/article/details/48863347

Android SlidingTabLayout默认的滑动指示条是系统默认的某个蓝色系色值,分割线是灰色。如果要自定义实现滑动指示条和分割线定制颜色,则主要通过SlidingTabLayout的setCustomTabColorizer()方法实现。
现在给出一个例子加以说明。
(1)首先做一个MainActivity,此MainActivity没有实质意义,只是作为第二步加载要实现SlidingTabLayout Fragment的“容器”。
(2)在一个Fragment实现SlidingTabLayout,然后将此Fragment加载。

 

不要忘记引用Android官方实现的SlidingTabLayout和SlidingTabStrip。

代码层次结构如图所示:


测试用的主Activity MainActivity.java :

 1 package com.zzw.testsetcustomtabcolorizer; 2  3 import android.os.Bundle; 4 import android.support.v4.app.FragmentActivity; 5 import android.support.v4.app.FragmentTransaction; 6  7 public class MainActivity extends FragmentActivity { 8  9     @Override10     protected void onCreate(Bundle savedInstanceState) {11         super.onCreate(savedInstanceState);12         setContentView(R.layout.activity_main);13 14         if (savedInstanceState == null) {15             FragmentTransaction transaction = getSupportFragmentManager()16                     .beginTransaction();17             TabFragment fragment = new TabFragment();18             transaction.replace(R.id.content_fragment, fragment);19             transaction.commit();20         }21     }22 }

 

 

MainActivity.java需要的布局文件:activity_main.xml:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     tools:context="com.zzw.testsetcustomtabcolorizer.MainActivity" > 6  7     <FrameLayout 8         android:id="@+id/content_fragment" 9         android:layout_width="match_parent"10         android:layout_height="match_parent" />11 12 </RelativeLayout>

 

 

TabFragment.java代码文件:

  1 package com.zzw.testsetcustomtabcolorizer;  2   3 import java.util.ArrayList;  4   5 import com.zzw.testsetcustomtabcolorizer.SlidingTabLayout.TabColorizer;  6   7 import android.graphics.Color;  8 import android.os.Bundle;  9 import android.support.annotation.Nullable; 10 import android.support.v4.app.Fragment; 11 import android.support.v4.app.FragmentManager; 12 import android.support.v4.app.FragmentPagerAdapter; 13 import android.support.v4.view.ViewPager; 14 import android.view.Gravity; 15 import android.view.LayoutInflater; 16 import android.view.View; 17 import android.view.ViewGroup; 18 import android.webkit.WebView.FindListener; 19 import android.widget.TextView; 20  21 public class TabFragment extends Fragment { 22  23     private static class PagerItem { 24         private final CharSequence mTitle; 25         private final int mIndicatorColor; 26         private final int mDividerColor; 27  28         public PagerItem(CharSequence mTitle, int mIndicatorColor, 29                 int mDividerColor) { 30             super(); 31             this.mTitle = mTitle; 32             this.mIndicatorColor = mIndicatorColor; 33             this.mDividerColor = mDividerColor; 34         } 35  36         public Fragment createFragment() { 37             return ContentFragment.newInstance(mTitle, mIndicatorColor, 38                     mDividerColor); 39  40         } 41  42         public CharSequence getTitle() { 43             return mTitle; 44         } 45  46         public int getIndicatorColor() { 47             return mIndicatorColor; 48         } 49  50         public int getDividerColor() { 51             return mDividerColor; 52         } 53     } 54  55     private ArrayList<PagerItem> mTabCards = new ArrayList<PagerItem>(); 56  57     public static class ContentFragment extends Fragment { 58         private static final String KEY_TITLE = "title"; 59         private static final String KEY_INDICATOR_COLOR = "indicator_color"; 60         private static final String KEY_DIVIDER_COLOR = "divider_color"; 61  62         public static ContentFragment newInstance(CharSequence title, 63                 int indicatorColor, int dividerColor) { 64             Bundle bundle = new Bundle(); 65             bundle.putCharSequence(KEY_TITLE, title); 66             bundle.putInt(KEY_INDICATOR_COLOR, indicatorColor); 67             bundle.putInt(KEY_DIVIDER_COLOR, dividerColor); 68  69             ContentFragment fragment = new ContentFragment(); 70             fragment.setArguments(bundle); 71  72             return fragment; 73         } 74  75         @Override 76         @Nullable 77         public View onCreateView(LayoutInflater inflater, 78                 @Nullable ViewGroup container, 79                 @Nullable Bundle savedInstanceState) { 80  81             TextView tv = new TextView(getActivity()); 82             tv.setGravity(Gravity.CENTER); 83  84             return tv; 85         } 86  87         @Override 88         public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 89             TextView tv = (TextView) view; 90  91             Bundle args = getArguments(); 92  93             String content = ""; 94             if (args != null) { 95                 String title = args.getCharSequence(KEY_TITLE) + ""; 96  97                 int indicatorColor = args.getInt(KEY_INDICATOR_COLOR); 98                 String indicatorColors = Integer.toHexString(indicatorColor) 99                         + "";100 101                 int dividerColor = args.getInt(KEY_DIVIDER_COLOR);102                 String dividerColors = Integer.toHexString(dividerColor) + "";103 104                 content = content + "标题:" + title + "\n";105                 content = content + "indicatorColor:" + indicatorColors + "\n";106                 content = content + "dividerColor:" + dividerColors;107             }108             tv.setText(content);109         }110 111     }112 113     @Override114     public void onCreate(@Nullable Bundle savedInstanceState) {115         super.onCreate(savedInstanceState);116 117         mTabCards.add(new PagerItem("Tab A", Color.RED, Color.RED));118         mTabCards.add(new PagerItem("Tab B", Color.YELLOW, Color.YELLOW));119         mTabCards.add(new PagerItem("Tab C", Color.GREEN, Color.GREEN));120         mTabCards.add(new PagerItem("Tab D", Color.BLUE, Color.BLUE));121         mTabCards.add(new PagerItem("Tab E", Color.CYAN, Color.CYAN));122         mTabCards.add(new PagerItem("Tab F", Color.MAGENTA, Color.MAGENTA));123     }124 125     @Override126     @Nullable127     public View onCreateView(LayoutInflater inflater,128             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {129         return inflater.inflate(R.layout.fragment, null);130     }131 132     @Override133     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {134         ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewpager);135         mViewPager.setAdapter(new MyFragmentPagerAdapter(136                 getChildFragmentManager()));137 138         SlidingTabLayout mSlidingTabLayout = (SlidingTabLayout) view139                 .findViewById(R.id.sliding_tabs);140         mSlidingTabLayout.setViewPager(mViewPager);141       //设置颜色的代码142         mSlidingTabLayout.setCustomTabColorizer(new TabColorizer() {143 144             @Override145             public int getIndicatorColor(int position) {146                 return mTabCards.get(position).getIndicatorColor();147             }148 149             @Override150             public int getDividerColor(int position) {151 152                 return mTabCards.get(position).getDividerColor();153             }154         });155 156     }157 158     public class MyFragmentPagerAdapter extends FragmentPagerAdapter {159 160         public MyFragmentPagerAdapter(FragmentManager fm) {161             super(fm);162         }163 164         @Override165         public int getCount() {166             return mTabCards.size();167         }168 169         @Override170         public CharSequence getPageTitle(int position) {171             return mTabCards.get(position).getTitle();172         }173 174         @Override175         public Fragment getItem(int position) {176             return mTabCards.get(position).createFragment();177         }178 179     }180 }

 

 

TabFragment.java需要的布局文件fragment.xml文件代码

 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     android:orientation="vertical" > 6  7     <com.zzw.testsetcustomtabcolorizer.SlidingTabLayout 8         android:id="@+id/sliding_tabs" 9         android:layout_width="match_parent"10         android:layout_height="wrap_content" />11 12     <android.support.v4.view.ViewPager13         android:id="@+id/viewpager"14         android:layout_width="match_parent"15         android:layout_height="wrap_content" />16 </LinearLayout>

 

  相关解决方案