(转)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 :

package com.zzw.testsetcustomtabcolorizer;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;

public class MainActivity extends FragmentActivity {

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

        if (savedInstanceState == null) {
            FragmentTransaction transaction = getSupportFragmentManager()
                    .beginTransaction();
            TabFragment fragment = new TabFragment();
            transaction.replace(R.id.content_fragment, fragment);
            transaction.commit();
        }
    }
}

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


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zzw.testsetcustomtabcolorizer.MainActivity" >

    <FrameLayout
        android:id="@+id/content_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

TabFragment.java代码文件:

package com.zzw.testsetcustomtabcolorizer;

import java.util.ArrayList;

import com.zzw.testsetcustomtabcolorizer.SlidingTabLayout.TabColorizer;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.TextView;

public class TabFragment extends Fragment {

    private static class PagerItem {
        private final CharSequence mTitle;
        private final int mIndicatorColor;
        private final int mDividerColor;

        public PagerItem(CharSequence mTitle, int mIndicatorColor,
                int mDividerColor) {
            super();
            this.mTitle = mTitle;
            this.mIndicatorColor = mIndicatorColor;
            this.mDividerColor = mDividerColor;
        }

        public Fragment createFragment() {
            return ContentFragment.newInstance(mTitle, mIndicatorColor,
                    mDividerColor);

        }

        public CharSequence getTitle() {
            return mTitle;
        }

        public int getIndicatorColor() {
            return mIndicatorColor;
        }

        public int getDividerColor() {
            return mDividerColor;
        }
    }

    private ArrayList<PagerItem> mTabCards = new ArrayList<PagerItem>();

    public static class ContentFragment extends Fragment {
        private static final String KEY_TITLE = "title";
        private static final String KEY_INDICATOR_COLOR = "indicator_color";
        private static final String KEY_DIVIDER_COLOR = "divider_color";

        public static ContentFragment newInstance(CharSequence title,
                int indicatorColor, int dividerColor) {
            Bundle bundle = new Bundle();
            bundle.putCharSequence(KEY_TITLE, title);
            bundle.putInt(KEY_INDICATOR_COLOR, indicatorColor);
            bundle.putInt(KEY_DIVIDER_COLOR, dividerColor);

            ContentFragment fragment = new ContentFragment();
            fragment.setArguments(bundle);

            return fragment;
        }

        @Override
        @Nullable
        public View onCreateView(LayoutInflater inflater,
                @Nullable ViewGroup container,
                @Nullable Bundle savedInstanceState) {

            TextView tv = new TextView(getActivity());
            tv.setGravity(Gravity.CENTER);

            return tv;
        }

        @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            TextView tv = (TextView) view;

            Bundle args = getArguments();

            String content = "";
            if (args != null) {
                String title = args.getCharSequence(KEY_TITLE) + "";

                int indicatorColor = args.getInt(KEY_INDICATOR_COLOR);
                String indicatorColors = Integer.toHexString(indicatorColor)
                        + "";

                int dividerColor = args.getInt(KEY_DIVIDER_COLOR);
                String dividerColors = Integer.toHexString(dividerColor) + "";

                content = content + "标题:" + title + "\n";
                content = content + "indicatorColor:" + indicatorColors + "\n";
                content = content + "dividerColor:" + dividerColors;
            }
            tv.setText(content);
        }

    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mTabCards.add(new PagerItem("Tab A", Color.RED, Color.RED));
        mTabCards.add(new PagerItem("Tab B", Color.YELLOW, Color.YELLOW));
        mTabCards.add(new PagerItem("Tab C", Color.GREEN, Color.GREEN));
        mTabCards.add(new PagerItem("Tab D", Color.BLUE, Color.BLUE));
        mTabCards.add(new PagerItem("Tab E", Color.CYAN, Color.CYAN));
        mTabCards.add(new PagerItem("Tab F", Color.MAGENTA, Color.MAGENTA));
    }

    @Override
    @Nullable
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment, null);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
        mViewPager.setAdapter(new MyFragmentPagerAdapter(
                getChildFragmentManager()));

        SlidingTabLayout mSlidingTabLayout = (SlidingTabLayout) view
                .findViewById(R.id.sliding_tabs);
        mSlidingTabLayout.setViewPager(mViewPager);
      //设置颜色的代码
        mSlidingTabLayout.setCustomTabColorizer(new TabColorizer() {

            @Override
            public int getIndicatorColor(int position) {
                return mTabCards.get(position).getIndicatorColor();
            }

            @Override
            public int getDividerColor(int position) {

                return mTabCards.get(position).getDividerColor();
            }
        });

    }

    public class MyFragmentPagerAdapter extends FragmentPagerAdapter {

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

        @Override
        public int getCount() {
            return mTabCards.size();
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mTabCards.get(position).getTitle();
        }

        @Override
        public Fragment getItem(int position) {
            return mTabCards.get(position).createFragment();
        }

    }
}

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.zzw.testsetcustomtabcolorizer.SlidingTabLayout
        android:id="@+id/sliding_tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值