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