• (转)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     @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 + "
    ";
    105                 content = content + "indicatorColor:" + indicatorColors + "
    ";
    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>
  • 相关阅读:
    DICOM worklist工作原理
    HTTP协议详解
    一分钟理解什么是REST和RESTful
    EAccessViolation
    opener和parent的区别
    ASP.NET,C#后台调用前台javascript的五种方法
    DEP
    JavaScript三种弹出框(alert,confirm和prompt)用法举例
    卸载服务
    openssl nodejs https+客户端证书+usbkey
  • 原文地址:https://www.cnblogs.com/zzw1994/p/5014789.html
Copyright © 2020-2023  润新知