Skip to content

Most visited

Recently visited

navigation
SlidingTabsColors / src / com.example.android.slidingtabscolors /

SlidingTabsColorsFragment.java

1
/*
2
 * Copyright 2013 The Android Open Source Project
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *       http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
package com.example.android.slidingtabscolors;
18
 
19
import com.example.android.common.view.SlidingTabLayout;
20
 
21
import android.graphics.Color;
22
import android.os.Bundle;
23
import android.support.v4.app.Fragment;
24
import android.support.v4.app.FragmentManager;
25
import android.support.v4.app.FragmentPagerAdapter;
26
import android.support.v4.view.ViewPager;
27
import android.view.LayoutInflater;
28
import android.view.View;
29
import android.view.ViewGroup;
30
 
31
import java.util.ArrayList;
32
import java.util.List;
33
 
34
/**
35
 * A basic sample which shows how to use {@link com.example.android.common.view.SlidingTabLayout}
36
 * to display a custom {@link ViewPager} title strip which gives continuous feedback to the user
37
 * when scrolling.
38
 */
39
public class SlidingTabsColorsFragment extends Fragment {
40
 
41
    /**
42
     * This class represents a tab to be displayed by {@link ViewPager} and it's associated
43
     * {@link SlidingTabLayout}.
44
     */
45
    static class SamplePagerItem {
46
        private final CharSequence mTitle;
47
        private final int mIndicatorColor;
48
        private final int mDividerColor;
49
 
50
        SamplePagerItem(CharSequence title, int indicatorColor, int dividerColor) {
51
            mTitle = title;
52
            mIndicatorColor = indicatorColor;
53
            mDividerColor = dividerColor;
54
        }
55
 
56
        /**
57
         * @return A new {@link Fragment} to be displayed by a {@link ViewPager}
58
         */
59
        Fragment createFragment() {
60
            return ContentFragment.newInstance(mTitle, mIndicatorColor, mDividerColor);
61
        }
62
 
63
        /**
64
         * @return the title which represents this tab. In this sample this is used directly by
65
         * {@link android.support.v4.view.PagerAdapter#getPageTitle(int)}
66
         */
67
        CharSequence getTitle() {
68
            return mTitle;
69
        }
70
 
71
        /**
72
         * @return the color to be used for indicator on the {@link SlidingTabLayout}
73
         */
74
        int getIndicatorColor() {
75
            return mIndicatorColor;
76
        }
77
 
78
        /**
79
         * @return the color to be used for right divider on the {@link SlidingTabLayout}
80
         */
81
        int getDividerColor() {
82
            return mDividerColor;
83
        }
84
    }
85
 
86
    static final String LOG_TAG = "SlidingTabsColorsFragment";
87
 
88
    /**
89
     * A custom {@link ViewPager} title strip which looks much like Tabs present in Android v4.0 and
90
     * above, but is designed to give continuous feedback to the user when scrolling.
91
     */
92
    private SlidingTabLayout mSlidingTabLayout;
93
 
94
    /**
95
     * A {@link ViewPager} which will be used in conjunction with the {@link SlidingTabLayout} above.
96
     */
97
    private ViewPager mViewPager;
98
 
99
    /**
100
     * List of {@link SamplePagerItem} which represent this sample's tabs.
101
     */
102
    private List<SamplePagerItem> mTabs = new ArrayList<SamplePagerItem>();
103
 
104
    @Override
105
    public void onCreate(Bundle savedInstanceState) {
106
        super.onCreate(savedInstanceState);
107
 
109
        /**
110
         * Populate our tab list with tabs. Each item contains a title, indicator color and divider
111
         * color, which are used by {@link SlidingTabLayout}.
112
         */
113
        mTabs.add(new SamplePagerItem(
114
                getString(R.string.tab_stream), // Title
115
                Color.BLUE, // Indicator color
116
                Color.GRAY // Divider color
117
        ));
118
 
119
        mTabs.add(new SamplePagerItem(
120
                getString(R.string.tab_messages), // Title
121
                Color.RED, // Indicator color
122
                Color.GRAY // Divider color
123
        ));
124
 
125
        mTabs.add(new SamplePagerItem(
126
                getString(R.string.tab_photos), // Title
127
                Color.YELLOW, // Indicator color
128
                Color.GRAY // Divider color
129
        ));
130
 
131
        mTabs.add(new SamplePagerItem(
132
                getString(R.string.tab_notifications), // Title
133
                Color.GREEN, // Indicator color
134
                Color.GRAY // Divider color
135
        ));
137
    }
138
 
139
    /**
140
     * Inflates the {@link View} which will be displayed by this {@link Fragment}, from the app's
141
     * resources.
142
     */
143
    @Override
144
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
145
            Bundle savedInstanceState) {
146
        return inflater.inflate(R.layout.fragment_sample, container, false);
147
    }
148
 
150
    /**
151
     * This is called after the {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)} has finished.
152
     * Here we can pick out the {@link View}s we need to configure from the content view.
153
     *
154
     * We set the {@link ViewPager}'s adapter to be an instance of
155
     * {@link SampleFragmentPagerAdapter}. The {@link SlidingTabLayout} is then given the
156
     * {@link ViewPager} so that it can populate itself.
157
     *
158
     * @param view View created in {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}
159
     */
160
    @Override
161
    public void onViewCreated(View view, Bundle savedInstanceState) {
163
        // Get the ViewPager and set it's PagerAdapter so that it can display items
164
        mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
165
        mViewPager.setAdapter(new SampleFragmentPagerAdapter(getChildFragmentManager()));
167
 
169
        // Give the SlidingTabLayout the ViewPager, this must be done AFTER the ViewPager has had
170
        // it's PagerAdapter set.
171
        mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
172
        mSlidingTabLayout.setViewPager(mViewPager);
173
 
175
        // Set a TabColorizer to customize the indicator and divider colors. Here we just retrieve
176
        // the tab at the position, and return it's set color
177
        mSlidingTabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
178
 
179
            @Override
180
            public int getIndicatorColor(int position) {
181
                return mTabs.get(position).getIndicatorColor();
182
            }
183
 
184
            @Override
185
            public int getDividerColor(int position) {
186
                return mTabs.get(position).getDividerColor();
187
            }
188
 
189
        });
192
    }
194
 
195
    /**
196
     * The {@link FragmentPagerAdapter} used to display pages in this sample. The individual pages
197
     * are instances of {@link ContentFragment} which just display three lines of text. Each page is
198
     * created by the relevant {@link SamplePagerItem} for the requested position.
199
     * <p>
200
     * The important section of this class is the {@link #getPageTitle(int)} method which controls
201
     * what is displayed in the {@link SlidingTabLayout}.
202
     */
203
    class SampleFragmentPagerAdapter extends FragmentPagerAdapter {
204
 
205
        SampleFragmentPagerAdapter(FragmentManager fm) {
206
            super(fm);
207
        }
208
 
209
        /**
210
         * Return the {@link android.support.v4.app.Fragment} to be displayed at {@code position}.
211
         * <p>
212
         * Here we return the value returned from {@link SamplePagerItem#createFragment()}.
213
         */
214
        @Override
215
        public Fragment getItem(int i) {
216
            return mTabs.get(i).createFragment();
217
        }
218
 
219
        @Override
220
        public int getCount() {
221
            return mTabs.size();
222
        }
223
 
225
        /**
226
         * Return the title of the item at {@code position}. This is important as what this method
227
         * returns is what is displayed in the {@link SlidingTabLayout}.
228
         * <p>
229
         * Here we return the value returned from {@link SamplePagerItem#getTitle()}.
230
         */
231
        @Override
232
        public CharSequence getPageTitle(int position) {
233
            return mTabs.get(position).getTitle();
234
        }
236
 
237
    }
238
 
239
}
This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.