diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java index 563effe52a7c9..238a9c033796e 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java +++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java @@ -17,6 +17,7 @@ package com.android.internal.view.menu; import android.content.Context; +import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Rect; @@ -79,6 +80,15 @@ public class ActionMenuItemView extends TextView mSavedPaddingLeft = -1; } + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + mAllowTextWithIcon = getContext().getResources().getBoolean( + com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon); + updateTextButtonVisibility(); + } + @Override public void setPadding(int l, int t, int r, int b) { mSavedPaddingLeft = l; @@ -242,6 +252,11 @@ public class ActionMenuItemView extends TextView @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) { + // Fill all available height. + heightMeasureSpec = MeasureSpec.makeMeasureSpec( + MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY); + } final boolean textVisible = hasText(); if (textVisible && mSavedPaddingLeft >= 0) { super.setPadding(mSavedPaddingLeft, getPaddingTop(), diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java index cf6029e4a6cd0..28113324bf775 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java +++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java @@ -576,6 +576,16 @@ public class ActionMenuPresenter extends BaseMenuPresenter public boolean needsDividerAfter() { return false; } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) { + // Fill available height + heightMeasureSpec = MeasureSpec.makeMeasureSpec( + MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY); + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } } private class OverflowPopup extends MenuPopupHelper { diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java index 511417e5eb9db..85e23fa2ca00b 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuView.java +++ b/core/java/com/android/internal/view/menu/ActionMenuView.java @@ -15,6 +15,8 @@ */ package com.android.internal.view.menu; +import com.android.internal.R; + import android.content.Context; import android.content.res.Configuration; import android.content.res.TypedArray; @@ -26,8 +28,6 @@ import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.widget.LinearLayout; -import com.android.internal.R; - /** * @hide */ @@ -73,6 +73,11 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo return mFormatItems; } + public void setMaxItemHeight(int maxItemHeight) { + mMaxItemHeight = maxItemHeight; + requestLayout(); + } + @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); diff --git a/core/java/com/android/internal/widget/AbsActionBarView.java b/core/java/com/android/internal/widget/AbsActionBarView.java index 860a8d9e51c30..ca7f5d03b1bfa 100644 --- a/core/java/com/android/internal/widget/AbsActionBarView.java +++ b/core/java/com/android/internal/widget/AbsActionBarView.java @@ -95,6 +95,9 @@ public abstract class AbsActionBarView extends ViewGroup { public void setContentHeight(int height) { mContentHeight = height; + if (mMenuView != null) { + mMenuView.setMaxItemHeight(mContentHeight); + } requestLayout(); }