ScrollingTabContainerView.java revision 251df77861525cca79d38bcee7c45c16c6752e40
1f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell/*
2f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell * Copyright (C) 2011 The Android Open Source Project
3f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell *
4f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell * Licensed under the Apache License, Version 2.0 (the "License");
5f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell * you may not use this file except in compliance with the License.
6f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell * You may obtain a copy of the License at
7f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell *
8f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell *      http://www.apache.org/licenses/LICENSE-2.0
9f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell *
10f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell * Unless required by applicable law or agreed to in writing, software
11f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell * distributed under the License is distributed on an "AS IS" BASIS,
12f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell * See the License for the specific language governing permissions and
14f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell * limitations under the License.
15f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell */
16f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellpackage com.android.internal.widget;
17f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
18f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.app.ActionBar;
19f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.content.Context;
20f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.graphics.drawable.Drawable;
21f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.text.TextUtils.TruncateAt;
22f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.view.Gravity;
23f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.view.View;
24f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.view.ViewGroup;
25f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.widget.HorizontalScrollView;
26f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.widget.ImageView;
27f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.widget.LinearLayout;
28f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellimport android.widget.TextView;
29f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
30f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powellpublic class ScrollingTabContainerView extends HorizontalScrollView {
31f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    Runnable mTabSelector;
32f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    private TabClickListener mTabClickListener;
33f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
34f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    private LinearLayout mTabLayout;
35f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
36f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    int mMaxTabWidth;
37f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
38f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public ScrollingTabContainerView(Context context) {
39f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        super(context);
40f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        setHorizontalScrollBarEnabled(false);
41f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
42f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
43f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    @Override
44f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
45f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
46f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        setFillViewport(widthMode == MeasureSpec.EXACTLY);
47f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
48f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        final int childCount = getChildCount();
49f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (childCount > 1 &&
50f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                (widthMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.AT_MOST)) {
51f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            if (childCount > 2) {
52f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                mMaxTabWidth = (int) (MeasureSpec.getSize(widthMeasureSpec) * 0.4f);
53f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            } else {
54f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                mMaxTabWidth = MeasureSpec.getSize(widthMeasureSpec) / 2;
55f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            }
56f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        } else {
57f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            mMaxTabWidth = -1;
58f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
59f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
60f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
61f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
62f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
63f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void setTabSelected(int position) {
64f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (mTabLayout == null) {
65f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            return;
66f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
67f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
68f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        final int tabCount = mTabLayout.getChildCount();
69f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        for (int i = 0; i < tabCount; i++) {
70f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            final View child = mTabLayout.getChildAt(i);
71f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            final boolean isSelected = i == position;
72f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            child.setSelected(isSelected);
73f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            if (isSelected) {
74f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                animateToTab(position);
75f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            }
76f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
77f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
78f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
79f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void animateToTab(int position) {
80f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        final View tabView = mTabLayout.getChildAt(position);
81f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (mTabSelector != null) {
82f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            removeCallbacks(mTabSelector);
83f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
84f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        mTabSelector = new Runnable() {
85f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            public void run() {
86f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                final int scrollPos = tabView.getLeft() - (getWidth() - tabView.getWidth()) / 2;
87f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                smoothScrollTo(scrollPos, 0);
88f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                mTabSelector = null;
89f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            }
90f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        };
91f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        post(mTabSelector);
92f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
93f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
94f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void setTabLayout(LinearLayout tabLayout) {
95f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (mTabLayout != tabLayout) {
96f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            if (mTabLayout != null) {
97f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                ((ViewGroup) mTabLayout.getParent()).removeView(mTabLayout);
98f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            }
99f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            if (tabLayout != null) {
100f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                addView(tabLayout);
101f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            }
102f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            mTabLayout = tabLayout;
103f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
104f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
105f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
106f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public LinearLayout getTabLayout() {
107f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        return mTabLayout;
108f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
109f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
110f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    @Override
111f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void onDetachedFromWindow() {
112f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        super.onDetachedFromWindow();
113f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (mTabSelector != null) {
114f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            removeCallbacks(mTabSelector);
115f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
116f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
117f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
118f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    private TabView createTabView(ActionBar.Tab tab) {
119f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        final TabView tabView = new TabView(getContext(), tab);
120f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        tabView.setFocusable(true);
121f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
122f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (mTabClickListener == null) {
123f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            mTabClickListener = new TabClickListener();
124f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
125f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        tabView.setOnClickListener(mTabClickListener);
126f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        return tabView;
127f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
128f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
129f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void addTab(ActionBar.Tab tab, boolean setSelected) {
130f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        View tabView = createTabView(tab);
131f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        mTabLayout.addView(tabView, new LinearLayout.LayoutParams(0,
132f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                LayoutParams.MATCH_PARENT, 1));
133f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (setSelected) {
134f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            tabView.setSelected(true);
135f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
136f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
137f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
138f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void addTab(ActionBar.Tab tab, int position, boolean setSelected) {
139f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        final TabView tabView = createTabView(tab);
140f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        mTabLayout.addView(tabView, position, new LinearLayout.LayoutParams(
141f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                0, LayoutParams.MATCH_PARENT, 1));
142f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (setSelected) {
143f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            tabView.setSelected(true);
144f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
145f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
146f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
147f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void updateTab(int position) {
148f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        ((TabView) mTabLayout.getChildAt(position)).update();
149f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
150f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
151f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void removeTabAt(int position) {
152f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (mTabLayout != null) {
153f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            mTabLayout.removeViewAt(position);
154f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
155f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
156f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
157f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    public void removeAllTabs() {
158f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        if (mTabLayout != null) {
159f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            mTabLayout.removeAllViews();
160f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
161f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
162f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
163f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    private class TabView extends LinearLayout {
164f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        private ActionBar.Tab mTab;
165f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        private TextView mTextView;
166f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        private ImageView mIconView;
167f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        private View mCustomView;
168f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
169f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        public TabView(Context context, ActionBar.Tab tab) {
170f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            super(context, null, com.android.internal.R.attr.actionBarTabStyle);
171f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            mTab = tab;
172f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
173f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            update();
174f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
175f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
176f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        @Override
177f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
178f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
179f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
180f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            // Re-measure if we went beyond our maximum size.
181f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            if (mMaxTabWidth > 0 && getMeasuredWidth() > mMaxTabWidth) {
182f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                super.onMeasure(MeasureSpec.makeMeasureSpec(mMaxTabWidth, MeasureSpec.EXACTLY),
183f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        heightMeasureSpec);
184f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            }
185f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
186f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
187f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        public void update() {
188f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            final ActionBar.Tab tab = mTab;
189f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            final View custom = tab.getCustomView();
190f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            if (custom != null) {
191f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                addView(custom);
192f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                mCustomView = custom;
193f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                if (mTextView != null) mTextView.setVisibility(GONE);
194f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                if (mIconView != null) {
195f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mIconView.setVisibility(GONE);
196f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mIconView.setImageDrawable(null);
197f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                }
198f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            } else {
199f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                if (mCustomView != null) {
200f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    removeView(mCustomView);
201f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mCustomView = null;
202f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                }
203f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
204f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                final Drawable icon = tab.getIcon();
205f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                final CharSequence text = tab.getText();
206f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
207f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                if (icon != null) {
208f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    if (mIconView == null) {
209f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        ImageView iconView = new ImageView(getContext());
210f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,
211f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                                LayoutParams.WRAP_CONTENT);
212f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        lp.gravity = Gravity.CENTER_VERTICAL;
213f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        iconView.setLayoutParams(lp);
214f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        addView(iconView, 0);
215f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        mIconView = iconView;
216f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    }
217f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mIconView.setImageDrawable(icon);
218f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mIconView.setVisibility(VISIBLE);
219f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                } else if (mIconView != null) {
220f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mIconView.setVisibility(GONE);
221f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mIconView.setImageDrawable(null);
222f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                }
223f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
224f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                if (text != null) {
225f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    if (mTextView == null) {
226f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        TextView textView = new TextView(getContext(), null,
227f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                                com.android.internal.R.attr.actionBarTabTextStyle);
228f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        textView.setSingleLine();
229f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        textView.setEllipsize(TruncateAt.END);
230f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,
231f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                                LayoutParams.WRAP_CONTENT);
232f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        lp.gravity = Gravity.CENTER_VERTICAL;
233f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        textView.setLayoutParams(lp);
234f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        addView(textView);
235f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                        mTextView = textView;
236f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    }
237f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mTextView.setText(text);
238f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mTextView.setVisibility(VISIBLE);
239251df77861525cca79d38bcee7c45c16c6752e40Adam Powell                } else if (mTextView != null) {
240f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                    mTextView.setVisibility(GONE);
241251df77861525cca79d38bcee7c45c16c6752e40Adam Powell                    mTextView.setText(null);
242f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                }
243f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            }
244f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
245f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
246f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        public ActionBar.Tab getTab() {
247f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            return mTab;
248f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
249f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
250f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell
251f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    private class TabClickListener implements OnClickListener {
252f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        public void onClick(View view) {
253f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            TabView tabView = (TabView) view;
254f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            tabView.getTab().select();
255f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            final int tabCount = mTabLayout.getChildCount();
256f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            for (int i = 0; i < tabCount; i++) {
257f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                final View child = mTabLayout.getChildAt(i);
258f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell                child.setSelected(child == view);
259f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell            }
260f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell        }
261f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell    }
262f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell}
263