diff options
author | Adam Powell <adamp@google.com> | 2014-03-17 19:10:43 -0700 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2014-04-04 10:08:17 -0700 |
commit | e43340c80dc66c45edc793ecd0343774aa34d108 (patch) | |
tree | 6a3f96a7b59d7fdd5efd45bedb666371dfaef249 /core/java/android/widget/ActionMenuView.java | |
parent | fc35dfd513677ca01e8d4950ff9faa4ed19e65fe (diff) | |
download | frameworks_base-e43340c80dc66c45edc793ecd0343774aa34d108.zip frameworks_base-e43340c80dc66c45edc793ecd0343774aa34d108.tar.gz frameworks_base-e43340c80dc66c45edc793ecd0343774aa34d108.tar.bz2 |
android.widget.Toolbar
Add the new Toolbar widget for use in app layouts.
ActionBar can now be used as a point of control for either a
traditional window decor action bar or for a Toolbar that appears
inline in an Activity's layout.
ToolbarActionBar is currently WIP.
Change-Id: I0da093e5645840f4fd032aa34efa0ae5f1825ff2
Diffstat (limited to 'core/java/android/widget/ActionMenuView.java')
-rw-r--r-- | core/java/android/widget/ActionMenuView.java | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/core/java/android/widget/ActionMenuView.java b/core/java/android/widget/ActionMenuView.java index 32c7086..3975edf 100644 --- a/core/java/android/widget/ActionMenuView.java +++ b/core/java/android/widget/ActionMenuView.java @@ -20,6 +20,7 @@ import android.content.res.Configuration; import android.util.AttributeSet; import android.view.Gravity; import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.ViewDebug; import android.view.ViewGroup; @@ -27,6 +28,7 @@ import android.view.accessibility.AccessibilityEvent; import com.android.internal.view.menu.ActionMenuItemView; import com.android.internal.view.menu.MenuBuilder; import com.android.internal.view.menu.MenuItemImpl; +import com.android.internal.view.menu.MenuPresenter; import com.android.internal.view.menu.MenuView; /** @@ -50,6 +52,8 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo private int mMinCellSize; private int mGeneratedItemPadding; + private OnMenuItemClickListener mOnMenuItemClickListener; + public ActionMenuView(Context context) { this(context, null); } @@ -78,6 +82,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo } } + public void setOnMenuItemClickListener(OnMenuItemClickListener listener) { + mOnMenuItemClickListener = listener; + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // If we've been given an exact size to match, apply special formatting during layout. @@ -96,11 +104,11 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo mMenu.onItemsChanged(true); } - if (mFormatItems) { + final int childCount = getChildCount(); + if (mFormatItems && childCount > 0) { onMeasureExactFormat(widthMeasureSpec, heightMeasureSpec); } else { // Previous measurement at exact format may have set margins - reset them. - final int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); @@ -559,9 +567,11 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo if (mMenu == null) { final Context context = getContext(); mMenu = new MenuBuilder(context); + mMenu.setCallback(new MenuBuilderCallback()); mPresenter = new ActionMenuPresenter(context); - mPresenter.initForMenu(context, mMenu); mPresenter.setMenuView(this); + mPresenter.setCallback(new ActionMenuPresenterCallback()); + mMenu.addMenuPresenter(mPresenter); } return mMenu; @@ -591,6 +601,44 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo return false; } + /** + * Interface responsible for receiving menu item click events if the items themselves + * do not have individual item click listeners. + */ + public interface OnMenuItemClickListener { + /** + * This method will be invoked when a menu item is clicked if the item itself did + * not already handle the event. + * + * @param item {@link MenuItem} that was clicked + * @return <code>true</code> if the event was handled, <code>false</code> otherwise. + */ + public boolean onMenuItemClick(MenuItem item); + } + + private class MenuBuilderCallback implements MenuBuilder.Callback { + @Override + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { + return mOnMenuItemClickListener != null && + mOnMenuItemClickListener.onMenuItemClick(item); + } + + @Override + public void onMenuModeChange(MenuBuilder menu) { + } + } + + private class ActionMenuPresenterCallback implements ActionMenuPresenter.Callback { + @Override + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { + } + + @Override + public boolean onOpenSubMenu(MenuBuilder subMenu) { + return false; + } + } + /** @hide */ public interface ActionMenuChildView { public boolean needsDividerBefore(); |