本文转载与: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>