field public static final int host = 16842792; // 0x1010028
field public static final int icon = 16842754; // 0x1010002
field public static final int iconPreview = 16843337; // 0x1010249
+ field public static final int iconTint = 16844000; // 0x10104e0
+ field public static final int iconTintMode = 16844001; // 0x10104e1
field public static final int iconifiedByDefault = 16843514; // 0x10102fa
field public static final int id = 16842960; // 0x10100d0
field public static final int ignoreGravity = 16843263; // 0x10101ff
field public static final int navigationContentDescription = 16843969; // 0x10104c1
field public static final int navigationIcon = 16843968; // 0x10104c0
field public static final int navigationMode = 16843471; // 0x10102cf
+ field public static final int navigationTint = 16844004; // 0x10104e4
+ field public static final int navigationTintMode = 16844005; // 0x10104e5
field public static final int negativeButtonText = 16843254; // 0x10101f6
field public static final int nestedScrollingEnabled = 16843830; // 0x1010436
field public static final int nextFocusDown = 16842980; // 0x10100e4
field public static final int overScrollFooter = 16843459; // 0x10102c3
field public static final int overScrollHeader = 16843458; // 0x10102c2
field public static final int overScrollMode = 16843457; // 0x10102c1
+ field public static final int overflowTint = 16844002; // 0x10104e2
+ field public static final int overflowTintMode = 16844003; // 0x10104e3
field public static final int overlapAnchor = 16843874; // 0x1010462
field public static final int overridesImplicitlyEnabledSubtype = 16843682; // 0x10103a2
field public static final int packageNames = 16843649; // 0x1010381
method public abstract android.view.MenuItem setEnabled(boolean);
method public abstract android.view.MenuItem setIcon(android.graphics.drawable.Drawable);
method public abstract android.view.MenuItem setIcon(int);
+ method public abstract android.view.MenuItem setIconTintList(android.content.res.ColorStateList);
+ method public abstract android.view.MenuItem setIconTintMode(android.graphics.PorterDuff.Mode);
method public abstract android.view.MenuItem setIntent(android.content.Intent);
method public abstract android.view.MenuItem setNumericShortcut(char);
method public abstract android.view.MenuItem setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener);
method public void onConfigurationChanged(android.content.res.Configuration);
method public void onDetachedFromWindow();
method public void setOnMenuItemClickListener(android.widget.ActionMenuView.OnMenuItemClickListener);
+ method public void setOverflowTintList(android.content.res.ColorStateList);
+ method public void setOverflowTintMode(android.graphics.PorterDuff.Mode);
method public void setPopupTheme(int);
method public boolean showOverflowMenu();
}
method public void setNavigationIcon(int);
method public void setNavigationIcon(android.graphics.drawable.Drawable);
method public void setNavigationOnClickListener(android.view.View.OnClickListener);
+ method public void setNavigationTintList(android.content.res.ColorStateList);
+ method public void setNavigationTintMode(android.graphics.PorterDuff.Mode);
method public void setOnMenuItemClickListener(android.widget.Toolbar.OnMenuItemClickListener);
+ method public void setOverflowTintList(android.content.res.ColorStateList);
+ method public void setOverflowTintMode(android.graphics.PorterDuff.Mode);
method public void setPopupTheme(int);
method public void setSubtitle(int);
method public void setSubtitle(java.lang.CharSequence);
field public static final int host = 16842792; // 0x1010028
field public static final int icon = 16842754; // 0x1010002
field public static final int iconPreview = 16843337; // 0x1010249
+ field public static final int iconTint = 16844000; // 0x10104e0
+ field public static final int iconTintMode = 16844001; // 0x10104e1
field public static final int iconifiedByDefault = 16843514; // 0x10102fa
field public static final int id = 16842960; // 0x10100d0
field public static final int ignoreGravity = 16843263; // 0x10101ff
field public static final int navigationContentDescription = 16843969; // 0x10104c1
field public static final int navigationIcon = 16843968; // 0x10104c0
field public static final int navigationMode = 16843471; // 0x10102cf
+ field public static final int navigationTint = 16844004; // 0x10104e4
+ field public static final int navigationTintMode = 16844005; // 0x10104e5
field public static final int negativeButtonText = 16843254; // 0x10101f6
field public static final int nestedScrollingEnabled = 16843830; // 0x1010436
field public static final int nextFocusDown = 16842980; // 0x10100e4
field public static final int overScrollFooter = 16843459; // 0x10102c3
field public static final int overScrollHeader = 16843458; // 0x10102c2
field public static final int overScrollMode = 16843457; // 0x10102c1
+ field public static final int overflowTint = 16844002; // 0x10104e2
+ field public static final int overflowTintMode = 16844003; // 0x10104e3
field public static final int overlapAnchor = 16843874; // 0x1010462
field public static final int overridesImplicitlyEnabledSubtype = 16843682; // 0x10103a2
field public static final int packageNames = 16843649; // 0x1010381
method public abstract android.view.MenuItem setEnabled(boolean);
method public abstract android.view.MenuItem setIcon(android.graphics.drawable.Drawable);
method public abstract android.view.MenuItem setIcon(int);
+ method public abstract android.view.MenuItem setIconTintList(android.content.res.ColorStateList);
+ method public abstract android.view.MenuItem setIconTintMode(android.graphics.PorterDuff.Mode);
method public abstract android.view.MenuItem setIntent(android.content.Intent);
method public abstract android.view.MenuItem setNumericShortcut(char);
method public abstract android.view.MenuItem setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener);
method public void onConfigurationChanged(android.content.res.Configuration);
method public void onDetachedFromWindow();
method public void setOnMenuItemClickListener(android.widget.ActionMenuView.OnMenuItemClickListener);
+ method public void setOverflowTintList(android.content.res.ColorStateList);
+ method public void setOverflowTintMode(android.graphics.PorterDuff.Mode);
method public void setPopupTheme(int);
method public boolean showOverflowMenu();
}
method public void setNavigationIcon(int);
method public void setNavigationIcon(android.graphics.drawable.Drawable);
method public void setNavigationOnClickListener(android.view.View.OnClickListener);
+ method public void setNavigationTintList(android.content.res.ColorStateList);
+ method public void setNavigationTintMode(android.graphics.PorterDuff.Mode);
method public void setOnMenuItemClickListener(android.widget.Toolbar.OnMenuItemClickListener);
+ method public void setOverflowTintList(android.content.res.ColorStateList);
+ method public void setOverflowTintMode(android.graphics.PorterDuff.Mode);
method public void setPopupTheme(int);
method public void setSubtitle(int);
method public void setSubtitle(java.lang.CharSequence);
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
+import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Xml;
private ActionProvider itemActionProvider;
+ private ColorStateList itemIconTintList;
+ private boolean itemIconTintListSet;
+ private PorterDuff.Mode itemIconTintMode;
+ private boolean itemIconTintModeSet;
+
private static final int defaultGroupId = NO_ID;
private static final int defaultItemId = NO_ID;
private static final int defaultItemCategory = 0;
itemActionProvider = null;
}
+ if (a.hasValueOrEmpty(com.android.internal.R.styleable.MenuItem_iconTint)) {
+ itemIconTintList = a.getColorStateList(
+ com.android.internal.R.styleable.MenuItem_iconTint);
+ itemIconTintListSet = true;
+ } else {
+ itemIconTintList = null;
+ itemIconTintListSet = false;
+ }
+ if (a.hasValueOrEmpty(com.android.internal.R.styleable.MenuItem_iconTintMode)) {
+ itemIconTintMode = Drawable.parseTintMode(
+ a.getInt(com.android.internal.R.styleable.MenuItem_iconTintMode, -1), null);
+ itemIconTintModeSet = true;
+ } else {
+ itemIconTintMode = null;
+ itemIconTintModeSet = false;
+ }
+
a.recycle();
itemAdded = false;
if (itemActionProvider != null) {
item.setActionProvider(itemActionProvider);
}
+
+ if (itemIconTintListSet) {
+ item.setIconTintList(itemIconTintList);
+ }
+ if (itemIconTintModeSet) {
+ item.setIconTintMode(itemIconTintMode);
+ }
}
public MenuItem addItem() {
import android.annotation.StringRes;
import android.app.Activity;
import android.content.Intent;
+import android.content.res.ColorStateList;
+import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
* @return This menu item instance for call chaining
*/
public MenuItem setOnActionExpandListener(OnActionExpandListener listener);
+
+ /**
+ * Applies a tint to the icon drawable. Does not modify the current tint
+ * mode, which is {@link PorterDuff.Mode#SRC_IN} by default.
+ * <p>
+ * Subsequent calls to {@link android.view.MenuItem#setIcon(android.graphics.drawable.Drawable)}
+ * will automatically mutate the drawable and apply the specified tint and tint mode.
+ *
+ * @param tint the tint to apply, may be {@code null} to clear tint
+ * @return This menu item instance for call chaining
+ */
+ public MenuItem setIconTintList(ColorStateList tint);
+
+ /**
+ * Specifies the blending mode used to apply the tint specified by {@link
+ * #setIconTintList(ColorStateList)} to the icon drawable. The default mode is {@link
+ * PorterDuff.Mode#SRC_IN}.
+ *
+ * @param tintMode the blending mode used to apply the tint, may be {@code null} to clear tint
+ * @return This menu item instance for call chaining
+ */
+ public MenuItem setIconTintMode(PorterDuff.Mode tintMode);
}
package android.widget;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.graphics.Matrix;
-import android.graphics.Rect;
+import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
implements ActionProvider.SubUiVisibilityListener {
private static final String TAG = "ActionMenuPresenter";
- private View mOverflowButton;
+ private OverflowMenuButton mOverflowButton;
private boolean mReserveOverflow;
private boolean mReserveOverflowSet;
private int mWidthLimit;
private OpenOverflowRunnable mPostedOpenRunnable;
private ActionMenuPopupCallback mPopupCallback;
+ private TintInfo mOverflowTintInfo;
+
final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback();
int mOpenSubMenuId;
mOverflowButton = new OverflowMenuButton(mSystemContext);
final int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
mOverflowButton.measure(spec, spec);
+ applyOverflowTint();
}
width -= mOverflowButton.getMeasuredWidth();
} else {
if (hasOverflow) {
if (mOverflowButton == null) {
mOverflowButton = new OverflowMenuButton(mSystemContext);
+ applyOverflowTint();
}
ViewGroup parent = (ViewGroup) mOverflowButton.getParent();
if (parent != mMenuView) {
menuView.initialize(mMenu);
}
+ public void setOverflowTintList(ColorStateList tint) {
+ if (mOverflowTintInfo == null) {
+ mOverflowTintInfo = new TintInfo();
+ }
+ mOverflowTintInfo.mTintList = tint;
+ mOverflowTintInfo.mHasTintList = true;
+
+ applyOverflowTint();
+ }
+
+ public void setOverflowTintMode(PorterDuff.Mode tintMode) {
+ if (mOverflowTintInfo == null) {
+ mOverflowTintInfo = new TintInfo();
+ }
+ mOverflowTintInfo.mTintMode = tintMode;
+ mOverflowTintInfo.mHasTintMode = true;
+
+ applyOverflowTint();
+ }
+
+ private void applyOverflowTint() {
+ final TintInfo tintInfo = mOverflowTintInfo;
+ if (tintInfo != null && (tintInfo.mHasTintList || tintInfo.mHasTintMode)) {
+ if (mOverflowButton != null) {
+ if (tintInfo.mHasTintList) {
+ mOverflowButton.setImageTintList(tintInfo.mTintList);
+ }
+ if (tintInfo.mHasTintMode) {
+ mOverflowButton.setImageTintMode(tintInfo.mTintMode);
+ }
+ }
+ }
+ }
+
private static class SavedState implements Parcelable {
public int openSubMenuId;
return mActionButtonPopup != null ? mActionButtonPopup.getPopup() : null;
}
}
+
+ private static class TintInfo {
+ ColorStateList mTintList;
+ PorterDuff.Mode mTintMode;
+ boolean mHasTintMode;
+ boolean mHasTintList;
+ }
}
package android.widget;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.Configuration;
+import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
mReserveOverflow = reserveOverflow;
}
+ /**
+ * Applies a tint to the overflow drawable. Does not modify the current tint
+ * mode, which is {@link PorterDuff.Mode#SRC_IN} by default.
+ *
+ * @param tint the tint to apply, may be {@code null} to clear tint
+ */
+ public void setOverflowTintList(ColorStateList tint) {
+ if (mPresenter != null) {
+ mPresenter.setOverflowTintList(tint);
+ }
+ }
+
+ /**
+ * Specifies the blending mode used to apply the tint specified by {@link
+ * #setOverflowTintList(ColorStateList)} to the overflow drawable.
+ * The default mode is {@link PorterDuff.Mode#SRC_IN}.
+ *
+ * @param tintMode the blending mode used to apply the tint, may be {@code null} to clear tint
+ */
+ public void setOverflowTintMode(PorterDuff.Mode tintMode) {
+ if (mPresenter != null) {
+ mPresenter.setOverflowTintMode(tintMode);
+ }
+ }
+
@Override
protected LayoutParams generateDefaultLayoutParams() {
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
import android.annotation.Nullable;
import android.app.ActionBar;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.TypedArray;
-import android.graphics.RectF;
+import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
private ImageButton mNavButtonView;
private ImageView mLogoView;
+ private TintInfo mOverflowTintInfo;
+ private TintInfo mNavTintInfo;
+
private Drawable mCollapseIcon;
private CharSequence mCollapseDescription;
private ImageButton mCollapseButtonView;
if (!TextUtils.isEmpty(navDesc)) {
setNavigationContentDescription(navDesc);
}
+
+ if (a.hasValue(R.styleable.Toolbar_overflowTint)) {
+ setOverflowTintList(a.getColorStateList(R.styleable.Toolbar_overflowTint));
+ }
+ if (a.hasValue(R.styleable.Toolbar_overflowTintMode)) {
+ setOverflowTintMode(Drawable.parseTintMode(
+ a.getInt(R.styleable.Toolbar_overflowTintMode, -1), null));
+ }
+ if (a.hasValue(R.styleable.Toolbar_navigationTint)) {
+ setNavigationTintList(a.getColorStateList(R.styleable.Toolbar_navigationTint));
+ }
+ if (a.hasValue(R.styleable.Toolbar_navigationTintMode)) {
+ setNavigationTintMode(Drawable.parseTintMode(
+ a.getInt(R.styleable.Toolbar_navigationTintMode, -1), null));
+ }
a.recycle();
}
}
/**
+ * Applies a tint to the icon drawable. Does not modify the current tint
+ * mode, which is {@link PorterDuff.Mode#SRC_IN} by default.
+ * <p>
+ * Subsequent calls to {@link #setNavigationIcon(Drawable)} will automatically mutate
+ * the drawable and apply the specified tint and tint mode.
+ *
+ * @param tint the tint to apply, may be {@code null} to clear tint
+ *
+ * @attr ref android.R.styleable#Toolbar_navigationTint
+ */
+ public void setNavigationTintList(ColorStateList tint) {
+ if (mNavTintInfo == null) {
+ mNavTintInfo = new TintInfo();
+ }
+ mNavTintInfo.mTintList = tint;
+ mNavTintInfo.mHasTintList = true;
+
+ applyNavigationTint();
+ }
+
+ /**
+ * Specifies the blending mode used to apply the tint specified by {@link
+ * #setNavigationTintList(ColorStateList)} to the navigation drawable.
+ * The default mode is {@link PorterDuff.Mode#SRC_IN}.
+ *
+ * @param tintMode the blending mode used to apply the tint, may be {@code null} to clear tint
+ *
+ * @attr ref android.R.styleable#Toolbar_navigationTintMode
+ */
+ public void setNavigationTintMode(PorterDuff.Mode tintMode) {
+ if (mNavTintInfo == null) {
+ mNavTintInfo = new TintInfo();
+ }
+ mNavTintInfo.mTintMode = tintMode;
+ mNavTintInfo.mHasTintMode = true;
+
+ applyNavigationTint();
+ }
+
+ /**
+ * Applies a tint to the overflow drawable. Does not modify the current tint
+ * mode, which is {@link PorterDuff.Mode#SRC_IN} by default.
+ *
+ * @param tint the tint to apply, may be {@code null} to clear tint
+ *
+ * @attr ref android.R.styleable#Toolbar_overflowTint
+ */
+ public void setOverflowTintList(ColorStateList tint) {
+ if (mMenuView != null) {
+ // If the menu view is available, directly set the tint
+ mMenuView.setOverflowTintList(tint);
+ } else {
+ // Otherwise we will record the value
+ if (mOverflowTintInfo == null) {
+ mOverflowTintInfo = new TintInfo();
+ }
+ mOverflowTintInfo.mTintList = tint;
+ mOverflowTintInfo.mHasTintList = true;
+ }
+ }
+
+ /**
+ * Specifies the blending mode used to apply the tint specified by {@link
+ * #setOverflowTintList(ColorStateList)} to the overflow drawable.
+ * The default mode is {@link PorterDuff.Mode#SRC_IN}.
+ *
+ * @param tintMode the blending mode used to apply the tint, may be {@code null} to clear tint
+ *
+ * @attr ref android.R.styleable#Toolbar_overflowTintMode
+ */
+ public void setOverflowTintMode(PorterDuff.Mode tintMode) {
+ if (mMenuView != null) {
+ // If the menu view is available, directly set the tint mode
+ mMenuView.setOverflowTintMode(tintMode);
+ } else {
+ // Otherwise we will record the value
+ if (mOverflowTintInfo == null) {
+ mOverflowTintInfo = new TintInfo();
+ }
+ mOverflowTintInfo.mTintMode = tintMode;
+ mOverflowTintInfo.mHasTintMode = true;
+ }
+ }
+
+ /**
* Return the Menu shown in the toolbar.
*
* <p>Applications that wish to populate the toolbar's menu can do so from here. To use
lp.gravity = Gravity.END | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK);
mMenuView.setLayoutParams(lp);
addSystemView(mMenuView);
+
+ if (mOverflowTintInfo != null) {
+ // If we have tint info for the overflow, set it on the menu view now
+ if (mOverflowTintInfo.mHasTintList) {
+ mMenuView.setOverflowTintList(mOverflowTintInfo.mTintList);
+ }
+ if (mOverflowTintInfo.mHasTintMode) {
+ mMenuView.setOverflowTintMode(mOverflowTintInfo.mTintMode);
+ }
+ mOverflowTintInfo = null;
+ }
}
}
final LayoutParams lp = generateDefaultLayoutParams();
lp.gravity = Gravity.START | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK);
mNavButtonView.setLayoutParams(lp);
+ applyNavigationTint();
}
}
collapseActionView();
}
});
+ applyNavigationTint();
}
}
return mPopupContext;
}
+ private void applyNavigationTint() {
+ final TintInfo tintInfo = mNavTintInfo;
+ if (tintInfo != null && (tintInfo.mHasTintList || tintInfo.mHasTintMode)) {
+ if (mNavButtonView != null) {
+ if (tintInfo.mHasTintList) {
+ mNavButtonView.setImageTintList(tintInfo.mTintList);
+ }
+ if (tintInfo.mHasTintMode) {
+ mNavButtonView.setImageTintMode(tintInfo.mTintMode);
+ }
+ }
+
+ if (mCollapseButtonView != null) {
+ // We will use the same tint for the collapse button
+ if (tintInfo.mHasTintList) {
+ mCollapseButtonView.setImageTintList(tintInfo.mTintList);
+ }
+ if (tintInfo.mHasTintMode) {
+ mCollapseButtonView.setImageTintMode(tintInfo.mTintMode);
+ }
+ }
+ }
+ }
+
/**
* Interface responsible for receiving menu item click events if the items themselves
* do not have individual item click listeners.
public void onRestoreInstanceState(Parcelable state) {
}
}
+
+ private static class TintInfo {
+ ColorStateList mTintList;
+ PorterDuff.Mode mTintMode;
+ boolean mHasTintMode;
+ boolean mHasTintList;
+ }
}
import android.content.Context;
import android.content.Intent;
+import android.content.res.ColorStateList;
+import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.view.ActionProvider;
import android.view.ContextMenu.ContextMenuInfo;
private Drawable mIconDrawable;
private int mIconResId = NO_ICON;
+ private TintInfo mIconTintInfo;
private Context mContext;
public MenuItem setIcon(Drawable icon) {
mIconDrawable = icon;
mIconResId = NO_ICON;
+ applyIconTint();
return this;
}
public MenuItem setIcon(int iconRes) {
mIconResId = iconRes;
mIconDrawable = mContext.getDrawable(iconRes);
+ applyIconTint();
return this;
}
// No need to save the listener; ActionMenuItem does not support collapsing items.
return this;
}
+
+ @Override
+ public MenuItem setIconTintList(ColorStateList tintList) {
+ if (mIconTintInfo == null) {
+ mIconTintInfo = new TintInfo();
+ }
+ mIconTintInfo.mTintList = tintList;
+ mIconTintInfo.mHasTintList = true;
+ applyIconTint();
+ return this;
+ }
+
+ @Override
+ public MenuItem setIconTintMode(PorterDuff.Mode tintMode) {
+ if (mIconTintInfo == null) {
+ mIconTintInfo = new TintInfo();
+ }
+ mIconTintInfo.mTintMode = tintMode;
+ mIconTintInfo.mHasTintMode = true;
+ applyIconTint();
+ return this;
+ }
+
+ private void applyIconTint() {
+ final TintInfo tintInfo = mIconTintInfo;
+ if (mIconDrawable != null && tintInfo != null) {
+ if (tintInfo.mHasTintList || tintInfo.mHasTintMode) {
+ mIconDrawable = mIconDrawable.mutate();
+ if (tintInfo.mHasTintList) {
+ mIconDrawable.setTintList(tintInfo.mTintList);
+ }
+ if (tintInfo.mHasTintMode) {
+ mIconDrawable.setTintMode(tintInfo.mTintMode);
+ }
+ }
+ }
+ }
+
+ private static class TintInfo {
+ ColorStateList mTintList;
+ PorterDuff.Mode mTintMode;
+ boolean mHasTintMode;
+ boolean mHasTintList;
+ }
}
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
+import android.content.res.ColorStateList;
+import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.ActionProvider;
* needed).
*/
private int mIconResId = NO_ICON;
+
+ /**
+ * Tint info for the icon
+ */
+ private TintInfo mIconTintInfo;
/** The menu to which this item belongs */
private MenuBuilder mMenu;
}
if (mIconResId != NO_ICON) {
- Drawable icon = mMenu.getContext().getDrawable(mIconResId);
+ mIconDrawable = mMenu.getContext().getDrawable(mIconResId);
mIconResId = NO_ICON;
- mIconDrawable = icon;
- return icon;
+ applyIconTint();
+ return mIconDrawable;
}
return null;
public MenuItem setIcon(Drawable icon) {
mIconResId = NO_ICON;
mIconDrawable = icon;
+ applyIconTint();
mMenu.onItemsChanged(false);
return this;
public boolean isActionViewExpanded() {
return mIsActionViewExpanded;
}
+
+ @Override
+ public MenuItem setIconTintList(ColorStateList tintList) {
+ if (mIconTintInfo == null) {
+ mIconTintInfo = new TintInfo();
+ }
+ mIconTintInfo.mTintList = tintList;
+ mIconTintInfo.mHasTintList = true;
+ applyIconTint();
+ return this;
+ }
+
+ @Override
+ public MenuItem setIconTintMode(PorterDuff.Mode tintMode) {
+ if (mIconTintInfo == null) {
+ mIconTintInfo = new TintInfo();
+ }
+ mIconTintInfo.mTintMode = tintMode;
+ mIconTintInfo.mHasTintMode = true;
+ applyIconTint();
+ return this;
+ }
+
+ private void applyIconTint() {
+ final TintInfo tintInfo = mIconTintInfo;
+ if (mIconDrawable != null && tintInfo != null) {
+ if (tintInfo.mHasTintList || tintInfo.mHasTintMode) {
+ mIconDrawable = mIconDrawable.mutate();
+ if (tintInfo.mHasTintList) {
+ mIconDrawable.setTintList(tintInfo.mTintList);
+ }
+ if (tintInfo.mHasTintMode) {
+ mIconDrawable.setTintMode(tintInfo.mTintMode);
+ }
+ }
+ }
+ }
+
+ private static class TintInfo {
+ ColorStateList mTintList;
+ PorterDuff.Mode mTintMode;
+ boolean mHasTintMode;
+ boolean mHasTintList;
+ }
}
for more info. -->
<attr name="actionProviderClass" format="string" />
+ <!-- An optional tint for the item's icon.
+ See {@link android.view.MenuItem#setIconTintList(android.content.res.ColorStateList)}
+ for more info. -->
+ <attr name="iconTint" format="color" />
+
+ <!-- The blending mode used for tinting the item's icon
+ See {@link android.view.MenuItem#setIconTintMode(android.graphics.PorterDuff.Mode)}
+ for more info. -->
+ <attr name="iconTintMode">
+ <!-- The tint is drawn on top of the drawable.
+ [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] -->
+ <enum name="src_over" value="3" />
+ <!-- The tint is masked by the alpha channel of the drawable. The drawable’s
+ color channels are thrown out. [Sa * Da, Sc * Da] -->
+ <enum name="src_in" value="5" />
+ <!-- The tint is drawn above the drawable, but with the drawable’s alpha
+ channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc] -->
+ <enum name="src_atop" value="9" />
+ <!-- Multiplies the color and alpha channels of the drawable with those of
+ the tint. [Sa * Da, Sc * Dc] -->
+ <enum name="multiply" value="14" />
+ <!-- [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] -->
+ <enum name="screen" value="15" />
+ <!-- Combines the tint and drawable color and alpha channels, clamping the
+ result to valid color values. Saturate(S + D) -->
+ <enum name="add" value="16" />
+ </attr>
</declare-styleable>
<!-- Attrbitutes for a ActvityChooserView. -->
<!-- Text to set as the content description for the navigation button
located at the start of the toolbar. -->
<attr name="navigationContentDescription" format="string" />
+
+ <!-- Tint used for the navigation button -->
+ <attr name="navigationTint" format="color" />
+ <!-- The blending mode used for tinting the navigation button -->
+ <attr name="navigationTintMode">
+ <!-- The tint is drawn on top of the drawable.
+ [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] -->
+ <enum name="src_over" value="3" />
+ <!-- The tint is masked by the alpha channel of the drawable. The drawable’s
+ color channels are thrown out. [Sa * Da, Sc * Da] -->
+ <enum name="src_in" value="5" />
+ <!-- The tint is drawn above the drawable, but with the drawable’s alpha
+ channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc] -->
+ <enum name="src_atop" value="9" />
+ <!-- Multiplies the color and alpha channels of the drawable with those of
+ the tint. [Sa * Da, Sc * Dc] -->
+ <enum name="multiply" value="14" />
+ <!-- [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] -->
+ <enum name="screen" value="15" />
+ <!-- Combines the tint and drawable color and alpha channels, clamping the
+ result to valid color values. Saturate(S + D). Only works on APIv 11+ -->
+ <enum name="add" value="16" />
+ </attr>
+
+ <!-- Tint used for the overflow button -->
+ <attr name="overflowTint" format="color" />
+ <!-- The blending mode used for tinting the overflow button -->
+ <attr name="overflowTintMode">
+ <!-- The tint is drawn on top of the drawable.
+ [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] -->
+ <enum name="src_over" value="3" />
+ <!-- The tint is masked by the alpha channel of the drawable. The drawable’s
+ color channels are thrown out. [Sa * Da, Sc * Da] -->
+ <enum name="src_in" value="5" />
+ <!-- The tint is drawn above the drawable, but with the drawable’s alpha
+ channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc] -->
+ <enum name="src_atop" value="9" />
+ <!-- Multiplies the color and alpha channels of the drawable with those of
+ the tint. [Sa * Da, Sc * Dc] -->
+ <enum name="multiply" value="14" />
+ <!-- [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] -->
+ <enum name="screen" value="15" />
+ <!-- Combines the tint and drawable color and alpha channels, clamping the
+ result to valid color values. Saturate(S + D). Only works on APIv 11+ -->
+ <enum name="add" value="16" />
+ </attr>
</declare-styleable>
<declare-styleable name="Toolbar_LayoutParams">
<public type="attr" name="end" />
<public type="attr" name="windowHasLightStatusBar" />
<public type="attr" name="numbersInnerTextColor" />
+ <public type="attr" name="iconTint" />
+ <public type="attr" name="iconTintMode" />
+ <public type="attr" name="overflowTint" />
+ <public type="attr" name="overflowTintMode" />
+ <public type="attr" name="navigationTint" />
+ <public type="attr" name="navigationTintMode" />
<public type="style" name="Widget.Material.Button.Colored" />