diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java index 419c582735cea..cbd9a6af425e8 100644 --- a/core/java/android/widget/Toolbar.java +++ b/core/java/android/widget/Toolbar.java @@ -1339,7 +1339,8 @@ public class Toolbar extends ViewGroup { return getPaddingTop(); case Gravity.BOTTOM: - return getPaddingBottom() - child.getMeasuredHeight() - lp.bottomMargin; + return getHeight() - getPaddingBottom() - + child.getMeasuredHeight() - lp.bottomMargin; default: case Gravity.CENTER_VERTICAL: diff --git a/core/java/com/android/internal/app/ToolbarActionBar.java b/core/java/com/android/internal/app/ToolbarActionBar.java index 5db09f4defd63..e8a3f0a76473e 100644 --- a/core/java/com/android/internal/app/ToolbarActionBar.java +++ b/core/java/com/android/internal/app/ToolbarActionBar.java @@ -281,6 +281,9 @@ public class ToolbarActionBar extends ActionBar { @Override public void setNavigationMode(@NavigationMode int mode) { + if (mode == ActionBar.NAVIGATION_MODE_TABS) { + throw new IllegalArgumentException("Tabs not supported in this configuration"); + } mDecorToolbar.setNavigationMode(mode); } diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index af827782f6995..aa642fd55c8a2 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -349,10 +349,7 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar { return mIncludeTabs; } - public void setEmbeddedTabView(View view) { - setEmbeddedTabView((ScrollingTabContainerView) view); - } - + @Override public void setEmbeddedTabView(ScrollingTabContainerView tabs) { if (mTabScrollView != null) { removeView(mTabScrollView); diff --git a/core/java/com/android/internal/widget/DecorToolbar.java b/core/java/com/android/internal/widget/DecorToolbar.java index ee6988e57d84a..5281045762ff9 100644 --- a/core/java/com/android/internal/widget/DecorToolbar.java +++ b/core/java/com/android/internal/widget/DecorToolbar.java @@ -71,7 +71,7 @@ public interface DecorToolbar { int getDisplayOptions(); void setDisplayOptions(int opts); - void setEmbeddedTabView(View tabView); + void setEmbeddedTabView(ScrollingTabContainerView tabView); boolean hasEmbeddedTabs(); boolean isTitleTruncated(); void setCollapsible(boolean collapsible); diff --git a/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java b/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java index ea39eed7c6e3c..b298d853369e0 100644 --- a/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java +++ b/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java @@ -397,8 +397,19 @@ public class ToolbarWidgetWrapper implements DecorToolbar { } @Override - public void setEmbeddedTabView(View tabView) { + public void setEmbeddedTabView(ScrollingTabContainerView tabView) { + if (mTabView != null && mTabView.getParent() == mToolbar) { + mToolbar.removeView(mTabView); + } mTabView = tabView; + if (tabView != null && mNavigationMode == ActionBar.NAVIGATION_MODE_TABS) { + mToolbar.addView(mTabView, 0); + Toolbar.LayoutParams lp = (Toolbar.LayoutParams) mTabView.getLayoutParams(); + lp.width = ViewGroup.LayoutParams.WRAP_CONTENT; + lp.height = ViewGroup.LayoutParams.WRAP_CONTENT; + lp.gravity = Gravity.START | Gravity.BOTTOM; + tabView.setAllowCollapse(true); + } } @Override @@ -436,6 +447,11 @@ public class ToolbarWidgetWrapper implements DecorToolbar { mToolbar.removeView(mSpinner); } break; + case ActionBar.NAVIGATION_MODE_TABS: + if (mTabView != null && mTabView.getParent() == mToolbar) { + mToolbar.removeView(mTabView); + } + break; } mNavigationMode = mode; @@ -448,7 +464,14 @@ public class ToolbarWidgetWrapper implements DecorToolbar { mToolbar.addView(mSpinner, 0); break; case ActionBar.NAVIGATION_MODE_TABS: - throw new IllegalStateException("Tabs not supported in this configuration"); + if (mTabView != null) { + mToolbar.addView(mTabView, 0); + Toolbar.LayoutParams lp = (Toolbar.LayoutParams) mTabView.getLayoutParams(); + lp.width = ViewGroup.LayoutParams.WRAP_CONTENT; + lp.height = ViewGroup.LayoutParams.WRAP_CONTENT; + lp.gravity = Gravity.START | Gravity.BOTTOM; + } + break; default: throw new IllegalArgumentException("Invalid navigation mode " + mode); }