码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-12-03 00:14:37      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

本文转载与: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     @Override
10     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     @Override
114     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     @Override
126     @Nullable
127     public View onCreateView(LayoutInflater inflater,
128             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
129         return inflater.inflate(R.layout.fragment, null);
130     }
131 
132     @Override
133     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) view
139                 .findViewById(R.id.sliding_tabs);
140         mSlidingTabLayout.setViewPager(mViewPager);
141       //设置颜色的代码
142         mSlidingTabLayout.setCustomTabColorizer(new TabColorizer() {
143 
144             @Override
145             public int getIndicatorColor(int position) {
146                 return mTabCards.get(position).getIndicatorColor();
147             }
148 
149             @Override
150             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         @Override
165         public int getCount() {
166             return mTabCards.size();
167         }
168 
169         @Override
170         public CharSequence getPageTitle(int position) {
171             return mTabCards.get(position).getTitle();
172         }
173 
174         @Override
175         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.ViewPager
13         android:id="@+id/viewpager"
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content" />
16 </LinearLayout>

 

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

标签:

原文地址:http://www.cnblogs.com/zzw1994/p/5014789.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!