FileDocCategorySizeDatePackage
ActionMenuItemView.javaAPI DocAndroid 5.1 API11810Thu Mar 12 22:22:10 GMT 2015com.android.internal.view.menu

ActionMenuItemView

public class ActionMenuItemView extends android.widget.TextView implements ActionMenuView.ActionMenuChildView, View.OnClickListener, MenuView.ItemView, View.OnLongClickListener
hide

Fields Summary
private static final String
TAG
private MenuItemImpl
mItemData
private CharSequence
mTitle
private android.graphics.drawable.Drawable
mIcon
private MenuBuilder.ItemInvoker
mItemInvoker
private android.widget.ListPopupWindow.ForwardingListener
mForwardingListener
private PopupCallback
mPopupCallback
private boolean
mAllowTextWithIcon
private boolean
mExpandedFormat
private int
mMinWidth
private int
mSavedPaddingLeft
private static final int
MAX_ICON_SIZE
private int
mMaxIconSize
Constructors Summary
public ActionMenuItemView(android.content.Context context)


       
        this(context, null);
    
public ActionMenuItemView(android.content.Context context, android.util.AttributeSet attrs)

        this(context, attrs, 0);
    
public ActionMenuItemView(android.content.Context context, android.util.AttributeSet attrs, int defStyleAttr)

        this(context, attrs, defStyleAttr, 0);
    
public ActionMenuItemView(android.content.Context context, android.util.AttributeSet attrs, int defStyleAttr, int defStyleRes)

        super(context, attrs, defStyleAttr, defStyleRes);
        final Resources res = context.getResources();
        mAllowTextWithIcon = res.getBoolean(
                com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
        final TypedArray a = context.obtainStyledAttributes(attrs,
                com.android.internal.R.styleable.ActionMenuItemView, defStyleAttr, defStyleRes);
        mMinWidth = a.getDimensionPixelSize(
                com.android.internal.R.styleable.ActionMenuItemView_minWidth, 0);
        a.recycle();

        final float density = res.getDisplayMetrics().density;
        mMaxIconSize = (int) (MAX_ICON_SIZE * density + 0.5f);

        setOnClickListener(this);
        setOnLongClickListener(this);

        mSavedPaddingLeft = -1;
    
Methods Summary
public booleandispatchHoverEvent(android.view.MotionEvent event)

        // Don't allow children to hover; we want this to be treated as a single component.
        return onHoverEvent(event);
    
public booleandispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent event)

        onPopulateAccessibilityEvent(event);
        return true;
    
public MenuItemImplgetItemData()

        return mItemData;
    
public booleanhasText()

        return !TextUtils.isEmpty(getText());
    
public voidinitialize(MenuItemImpl itemData, int menuType)

        mItemData = itemData;

        setIcon(itemData.getIcon());
        setTitle(itemData.getTitleForItemView(this)); // Title only takes effect if there is no icon
        setId(itemData.getItemId());

        setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE);
        setEnabled(itemData.isEnabled());

        if (itemData.hasSubMenu()) {
            if (mForwardingListener == null) {
                mForwardingListener = new ActionMenuItemForwardingListener();
            }
        }
    
public booleanneedsDividerAfter()

        return hasText();
    
public booleanneedsDividerBefore()

        return hasText() && mItemData.getIcon() == null;
    
public voidonClick(android.view.View v)

        if (mItemInvoker != null) {
            mItemInvoker.invokeItem(mItemData);
        }
    
public voidonConfigurationChanged(android.content.res.Configuration newConfig)

        super.onConfigurationChanged(newConfig);

        mAllowTextWithIcon = getContext().getResources().getBoolean(
                com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
        updateTextButtonVisibility();
    
public booleanonLongClick(android.view.View v)

        if (hasText()) {
            // Don't show the cheat sheet for items that already show text.
            return false;
        }

        final int[] screenPos = new int[2];
        final Rect displayFrame = new Rect();
        getLocationOnScreen(screenPos);
        getWindowVisibleDisplayFrame(displayFrame);

        final Context context = getContext();
        final int width = getWidth();
        final int height = getHeight();
        final int midy = screenPos[1] + height / 2;
        int referenceX = screenPos[0] + width / 2;
        if (v.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR) {
            final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
            referenceX = screenWidth - referenceX; // mirror
        }
        Toast cheatSheet = Toast.makeText(context, mItemData.getTitle(), Toast.LENGTH_SHORT);
        if (midy < displayFrame.height()) {
            // Show along the top; follow action buttons
            cheatSheet.setGravity(Gravity.TOP | Gravity.END, referenceX, height);
        } else {
            // Show along the bottom center
            cheatSheet.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, height);
        }
        cheatSheet.show();
        return true;
    
protected voidonMeasure(int widthMeasureSpec, int heightMeasureSpec)

        final boolean textVisible = hasText();
        if (textVisible && mSavedPaddingLeft >= 0) {
            super.setPadding(mSavedPaddingLeft, getPaddingTop(),
                    getPaddingRight(), getPaddingBottom());
        }

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        final int oldMeasuredWidth = getMeasuredWidth();
        final int targetWidth = widthMode == MeasureSpec.AT_MOST ? Math.min(widthSize, mMinWidth)
                : mMinWidth;

        if (widthMode != MeasureSpec.EXACTLY && mMinWidth > 0 && oldMeasuredWidth < targetWidth) {
            // Remeasure at exactly the minimum width.
            super.onMeasure(MeasureSpec.makeMeasureSpec(targetWidth, MeasureSpec.EXACTLY),
                    heightMeasureSpec);
        }

        if (!textVisible && mIcon != null) {
            // TextView won't center compound drawables in both dimensions without
            // a little coercion. Pad in to center the icon after we've measured.
            final int w = getMeasuredWidth();
            final int dw = mIcon.getBounds().width();
            super.setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom());
        }
    
public voidonPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent event)

        super.onPopulateAccessibilityEvent(event);
        final CharSequence cdesc = getContentDescription();
        if (!TextUtils.isEmpty(cdesc)) {
            event.getText().add(cdesc);
        }
    
public booleanonTouchEvent(android.view.MotionEvent e)

        if (mItemData.hasSubMenu() && mForwardingListener != null
                && mForwardingListener.onTouch(this, e)) {
            return true;
        }
        return super.onTouchEvent(e);
    
public booleanprefersCondensedTitle()

        return true;
    
public voidsetCheckable(boolean checkable)

        // TODO Support checkable action items
    
public voidsetChecked(boolean checked)

        // TODO Support checkable action items
    
public voidsetExpandedFormat(boolean expandedFormat)

        if (mExpandedFormat != expandedFormat) {
            mExpandedFormat = expandedFormat;
            if (mItemData != null) {
                mItemData.actionFormatChanged();
            }
        }
    
public voidsetIcon(android.graphics.drawable.Drawable icon)

        mIcon = icon;
        if (icon != null) {
            int width = icon.getIntrinsicWidth();
            int height = icon.getIntrinsicHeight();
            if (width > mMaxIconSize) {
                final float scale = (float) mMaxIconSize / width;
                width = mMaxIconSize;
                height *= scale;
            }
            if (height > mMaxIconSize) {
                final float scale = (float) mMaxIconSize / height;
                height = mMaxIconSize;
                width *= scale;
            }
            icon.setBounds(0, 0, width, height);
        }
        setCompoundDrawables(icon, null, null, null);

        updateTextButtonVisibility();
    
public voidsetItemInvoker(MenuBuilder.ItemInvoker invoker)

        mItemInvoker = invoker;
    
public voidsetPadding(int l, int t, int r, int b)

        mSavedPaddingLeft = l;
        super.setPadding(l, t, r, b);
    
public voidsetPopupCallback(com.android.internal.view.menu.ActionMenuItemView$PopupCallback popupCallback)

        mPopupCallback = popupCallback;
    
public voidsetShortcut(boolean showShortcut, char shortcutKey)

        // Action buttons don't show text for shortcut keys.
    
public voidsetTitle(java.lang.CharSequence title)

        mTitle = title;

        setContentDescription(mTitle);
        updateTextButtonVisibility();
    
public booleanshowsIcon()

        return true;
    
private voidupdateTextButtonVisibility()

        boolean visible = !TextUtils.isEmpty(mTitle);
        visible &= mIcon == null ||
                (mItemData.showsTextAsAction() && (mAllowTextWithIcon || mExpandedFormat));

        setText(visible ? mTitle : null);