/** * Fits as many menu items in the main panel and returns a list of the menu items that were not * fit in. * * @return The menu items that are not included in this main panel. */ public List<MenuItem> layoutMenuItems(List<MenuItem> menuItems, int suggestedWidth) { final int toolbarWidth = getAdjustedToolbarWidth(mContext, suggestedWidth) // Reserve space for the "open overflow" button. - getEstimatedOpenOverflowButtonWidth(mContext); int availableWidth = toolbarWidth; final LinkedList<MenuItem> remainingMenuItems = new LinkedList<MenuItem>(menuItems); mContentView.removeAllViews(); boolean isFirstItem = true; while (!remainingMenuItems.isEmpty()) { final MenuItem menuItem = remainingMenuItems.peek(); Button menuItemButton = createMenuItemButton(mContext, menuItem); // Adding additional start padding for the first button to even out button spacing. if (isFirstItem) { menuItemButton.setPaddingRelative( (int) (1.5 * menuItemButton.getPaddingStart()), menuItemButton.getPaddingTop(), menuItemButton.getPaddingEnd(), menuItemButton.getPaddingBottom()); isFirstItem = false; } // Adding additional end padding for the last button to even out button spacing. if (remainingMenuItems.size() == 1) { menuItemButton.setPaddingRelative( menuItemButton.getPaddingStart(), menuItemButton.getPaddingTop(), (int) (1.5 * menuItemButton.getPaddingEnd()), menuItemButton.getPaddingBottom()); } menuItemButton.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); int menuItemButtonWidth = Math.min(menuItemButton.getMeasuredWidth(), toolbarWidth); if (menuItemButtonWidth <= availableWidth) { menuItemButton.setTag(menuItem); menuItemButton.setOnClickListener(mMenuItemButtonOnClickListener); mContentView.addView(menuItemButton); ViewGroup.LayoutParams params = menuItemButton.getLayoutParams(); params.width = menuItemButtonWidth; menuItemButton.setLayoutParams(params); availableWidth -= menuItemButtonWidth; remainingMenuItems.pop(); } else { if (mOpenOverflowButton == null) { mOpenOverflowButton = (ImageButton) LayoutInflater.from(mContext) .inflate(R.layout.floating_popup_open_overflow_button, null); mOpenOverflowButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { if (mOpenOverflowButton != null) { mOpenOverflow.run(); } } }); } mContentView.addView(mOpenOverflowButton); break; } } return remainingMenuItems; }
@Override protected void layoutChildren(int l, int t, int width, int height) { setChildPosition(_content, l, t); setChildPosition( _close_btn, (width - _close_btn.getMeasuredWidth()) / 2, _content.getMeasuredHeight()); }