diff options
author | Adam Powell <adamp@google.com> | 2011-05-27 13:44:33 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-05-27 13:44:33 -0700 |
commit | 098f5bd427574b2d80912d683a2d4c0ca23e998f (patch) | |
tree | 8bd90b69be618b14cdd534811fd50b7e70187850 | |
parent | 8239b95d11d6bd68abce33f01d296b7edc6b786c (diff) | |
parent | d21aa12e8eb9d46ee92bf408b4b48386c6bf062d (diff) | |
download | frameworks_base-098f5bd427574b2d80912d683a2d4c0ca23e998f.zip frameworks_base-098f5bd427574b2d80912d683a2d4c0ca23e998f.tar.gz frameworks_base-098f5bd427574b2d80912d683a2d4c0ca23e998f.tar.bz2 |
Merge "Action bar tab layout tweaks."
3 files changed, 50 insertions, 5 deletions
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index 183cfbd..6cfeb87 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -176,6 +176,8 @@ public class ActionBarImpl extends ActionBar { } mActionView.setEmbeddedTabView(mTabScrollView); } + mActionView.setCollapsable(!mHasEmbeddedTabs && + getNavigationMode() == NAVIGATION_MODE_TABS); TypedArray a = mContext.obtainStyledAttributes(null, R.styleable.ActionBar); mContentHeight = a.getLayoutDimension(R.styleable.ActionBar_height, 0); @@ -307,7 +309,9 @@ public class ActionBarImpl extends ActionBar { selectTab(null); } mTabs.clear(); - mTabScrollView.removeAllTabs(); + if (mTabScrollView != null) { + mTabScrollView.removeAllTabs(); + } mSavedTabPosition = INVALID_POSITION; } @@ -887,6 +891,7 @@ public class ActionBarImpl extends ActionBar { } break; } + mActionView.setCollapsable(mode == NAVIGATION_MODE_TABS && !mHasEmbeddedTabs); } @Override diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java index f1618e1..1726390 100644 --- a/core/java/com/android/internal/widget/ActionBarContainer.java +++ b/core/java/com/android/internal/widget/ActionBarContainer.java @@ -96,13 +96,26 @@ public class ActionBarContainer extends FrameLayout { @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + int nonTabHeight = 0; + final int count = getChildCount(); + for (int i = 0; i < count; i++) { + final View child = getChildAt(i); + if (child == mTabContainer) { + continue; + } + + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + nonTabHeight = Math.max(nonTabHeight, + child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin); + } + if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { final int mode = MeasureSpec.getMode(heightMeasureSpec); if (mode == MeasureSpec.AT_MOST) { - final int measuredHeight = getMeasuredHeight(); final int maxHeight = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(getMeasuredWidth(), - Math.min(measuredHeight + mTabContainer.getMeasuredHeight(), maxHeight)); + Math.min(nonTabHeight + mTabContainer.getMeasuredHeight(), maxHeight)); } } } diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index ff04735..ef8481f 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -111,6 +111,7 @@ public class ActionBarView extends AbsActionBarView { private boolean mSplitActionBar; private boolean mUserTitle; private boolean mIncludeTabs; + private boolean mIsCollapsable; private MenuBuilder mOptionsMenu; @@ -629,8 +630,30 @@ public class ActionBarView extends AbsActionBarView { mContextView = view; } + public void setCollapsable(boolean collapsable) { + mIsCollapsable = collapsable; + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + final int childCount = getChildCount(); + if (mIsCollapsable) { + int visibleChildren = 0; + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + if (child.getVisibility() != GONE && + !(child == mMenuView && mMenuView.getChildCount() == 0)) { + visibleChildren++; + } + } + + if (visibleChildren == 0) { + // No size for an empty action bar when collapsable. + setMeasuredDimension(0, 0); + return; + } + } + int widthMode = MeasureSpec.getMode(widthMeasureSpec); if (widthMode != MeasureSpec.EXACTLY) { throw new IllegalStateException(getClass().getSimpleName() + " can only be used " + @@ -761,8 +784,7 @@ public class ActionBarView extends AbsActionBarView { if (mContentHeight <= 0) { int measuredHeight = 0; - final int count = getChildCount(); - for (int i = 0; i < count; i++) { + for (int i = 0; i < childCount; i++) { View v = getChildAt(i); int paddedViewHeight = v.getMeasuredHeight() + verticalPadding; if (paddedViewHeight > measuredHeight) { @@ -791,6 +813,11 @@ public class ActionBarView extends AbsActionBarView { final int y = getPaddingTop(); final int contentHeight = b - t - getPaddingTop() - getPaddingBottom(); + if (contentHeight <= 0) { + // Nothing to do if we can't see anything. + return; + } + if (mHomeLayout.getVisibility() != GONE) { x += positionChild(mHomeLayout, x, y, contentHeight); } |