Constructors Summary |
---|
public CheckedTextView(android.content.Context context)
this(context, null);
|
public CheckedTextView(android.content.Context context, android.util.AttributeSet attrs)
this(context, attrs, R.attr.checkedTextViewStyle);
|
public CheckedTextView(android.content.Context context, android.util.AttributeSet attrs, int defStyleAttr)
this(context, attrs, defStyleAttr, 0);
|
public CheckedTextView(android.content.Context context, android.util.AttributeSet attrs, int defStyleAttr, int defStyleRes)
super(context, attrs, defStyleAttr, defStyleRes);
final TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.CheckedTextView, defStyleAttr, defStyleRes);
final Drawable d = a.getDrawable(R.styleable.CheckedTextView_checkMark);
if (d != null) {
setCheckMarkDrawable(d);
}
if (a.hasValue(R.styleable.CheckedTextView_checkMarkTintMode)) {
mCheckMarkTintMode = Drawable.parseTintMode(a.getInt(
R.styleable.CheckedTextView_checkMarkTintMode, -1), mCheckMarkTintMode);
mHasCheckMarkTintMode = true;
}
if (a.hasValue(R.styleable.CheckedTextView_checkMarkTint)) {
mCheckMarkTintList = a.getColorStateList(R.styleable.CheckedTextView_checkMarkTint);
mHasCheckMarkTint = true;
}
mCheckMarkGravity = a.getInt(R.styleable.CheckedTextView_checkMarkGravity, Gravity.END);
final boolean checked = a.getBoolean(R.styleable.CheckedTextView_checked, false);
setChecked(checked);
a.recycle();
applyCheckMarkTint();
|
Methods Summary |
---|
private void | applyCheckMarkTint()
if (mCheckMarkDrawable != null && (mHasCheckMarkTint || mHasCheckMarkTintMode)) {
mCheckMarkDrawable = mCheckMarkDrawable.mutate();
if (mHasCheckMarkTint) {
mCheckMarkDrawable.setTintList(mCheckMarkTintList);
}
if (mHasCheckMarkTintMode) {
mCheckMarkDrawable.setTintMode(mCheckMarkTintMode);
}
// The drawable (or one of its children) may not have been
// stateful before applying the tint, so let's try again.
if (mCheckMarkDrawable.isStateful()) {
mCheckMarkDrawable.setState(getDrawableState());
}
}
|
public void | drawableHotspotChanged(float x, float y)
super.drawableHotspotChanged(x, y);
if (mCheckMarkDrawable != null) {
mCheckMarkDrawable.setHotspot(x, y);
}
|
protected void | drawableStateChanged()
super.drawableStateChanged();
if (mCheckMarkDrawable != null) {
int[] myDrawableState = getDrawableState();
// Set the state of the Drawable
mCheckMarkDrawable.setState(myDrawableState);
invalidate();
}
|
public android.graphics.drawable.Drawable | getCheckMarkDrawable()Gets the checkmark drawable
return mCheckMarkDrawable;
|
public android.content.res.ColorStateList | getCheckMarkTintList()Returns the tint applied to the check mark drawable, if specified.
return mCheckMarkTintList;
|
public PorterDuff.Mode | getCheckMarkTintMode()Returns the blending mode used to apply the tint to the check mark
drawable, if specified.
return mCheckMarkTintMode;
|
protected void | internalSetPadding(int left, int top, int right, int bottom)
super.internalSetPadding(left, top, right, bottom);
setBasePadding(isCheckMarkAtStart());
|
private boolean | isCheckMarkAtStart()
final int gravity = Gravity.getAbsoluteGravity(mCheckMarkGravity, getLayoutDirection());
final int hgrav = gravity & Gravity.HORIZONTAL_GRAVITY_MASK;
return hgrav == Gravity.LEFT;
|
public boolean | isChecked()
return mChecked;
|
public void | jumpDrawablesToCurrentState()
super.jumpDrawablesToCurrentState();
if (mCheckMarkDrawable != null) {
mCheckMarkDrawable.jumpToCurrentState();
}
|
protected int[] | onCreateDrawableState(int extraSpace)
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
|
protected void | onDraw(android.graphics.Canvas canvas)
super.onDraw(canvas);
final Drawable checkMarkDrawable = mCheckMarkDrawable;
if (checkMarkDrawable != null) {
final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
final int height = checkMarkDrawable.getIntrinsicHeight();
int y = 0;
switch (verticalGravity) {
case Gravity.BOTTOM:
y = getHeight() - height;
break;
case Gravity.CENTER_VERTICAL:
y = (getHeight() - height) / 2;
break;
}
final boolean checkMarkAtStart = isCheckMarkAtStart();
final int width = getWidth();
final int top = y;
final int bottom = top + height;
final int left;
final int right;
if (checkMarkAtStart) {
left = mBasePadding;
right = left + mCheckMarkWidth;
} else {
right = width - mBasePadding;
left = right - mCheckMarkWidth;
}
checkMarkDrawable.setBounds(mScrollX + left, top, mScrollX + right, bottom);
checkMarkDrawable.draw(canvas);
final Drawable background = getBackground();
if (background != null) {
background.setHotspotBounds(mScrollX + left, top, mScrollX + right, bottom);
}
}
|
public void | onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent event)
super.onInitializeAccessibilityEvent(event);
event.setClassName(CheckedTextView.class.getName());
event.setChecked(mChecked);
|
public void | onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo info)
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(CheckedTextView.class.getName());
info.setCheckable(true);
info.setChecked(mChecked);
|
public void | onRtlPropertiesChanged(int layoutDirection)
super.onRtlPropertiesChanged(layoutDirection);
updatePadding();
|
private void | setBasePadding(boolean checkmarkAtStart)
if (checkmarkAtStart) {
mBasePadding = mPaddingLeft;
} else {
mBasePadding = mPaddingRight;
}
|
public void | setCheckMarkDrawable(int resid)Set the checkmark to a given Drawable, identified by its resourece id. This will be drawn
when {@link #isChecked()} is true.
if (resid != 0 && resid == mCheckMarkResource) {
return;
}
mCheckMarkResource = resid;
Drawable d = null;
if (mCheckMarkResource != 0) {
d = getContext().getDrawable(mCheckMarkResource);
}
setCheckMarkDrawable(d);
|
public void | setCheckMarkDrawable(android.graphics.drawable.Drawable d)Set the checkmark to a given Drawable. This will be drawn when {@link #isChecked()} is true.
if (mCheckMarkDrawable != null) {
mCheckMarkDrawable.setCallback(null);
unscheduleDrawable(mCheckMarkDrawable);
}
mNeedRequestlayout = (d != mCheckMarkDrawable);
if (d != null) {
d.setCallback(this);
d.setVisible(getVisibility() == VISIBLE, false);
d.setState(CHECKED_STATE_SET);
setMinHeight(d.getIntrinsicHeight());
mCheckMarkWidth = d.getIntrinsicWidth();
d.setState(getDrawableState());
applyCheckMarkTint();
} else {
mCheckMarkWidth = 0;
}
mCheckMarkDrawable = d;
// Do padding resolution. This will call internalSetPadding() and do a
// requestLayout() if needed.
resolvePadding();
|
public void | setCheckMarkTintList(android.content.res.ColorStateList tint)Applies a tint to the check mark drawable. Does not modify the
current tint mode, which is {@link PorterDuff.Mode#SRC_IN} by default.
Subsequent calls to {@link #setCheckMarkDrawable(Drawable)} will
automatically mutate the drawable and apply the specified tint and
tint mode using
{@link Drawable#setTintList(ColorStateList)}.
mCheckMarkTintList = tint;
mHasCheckMarkTint = true;
applyCheckMarkTint();
|
public void | setCheckMarkTintMode(PorterDuff.Mode tintMode)Specifies the blending mode used to apply the tint specified by
{@link #setCheckMarkTintList(ColorStateList)} to the check mark
drawable. The default mode is {@link PorterDuff.Mode#SRC_IN}.
mCheckMarkTintMode = tintMode;
mHasCheckMarkTintMode = true;
applyCheckMarkTint();
|
public void | setChecked(boolean checked)Changes the checked state of this text view.
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
notifyViewAccessibilityStateChangedIfNeeded(
AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);
}
|
public void | setVisibility(int visibility)
super.setVisibility(visibility);
if (mCheckMarkDrawable != null) {
mCheckMarkDrawable.setVisible(visibility == VISIBLE, false);
}
|
public void | toggle()
setChecked(!mChecked);
|
private void | updatePadding()
resetPaddingToInitialValues();
int newPadding = (mCheckMarkDrawable != null) ?
mCheckMarkWidth + mBasePadding : mBasePadding;
if (isCheckMarkAtStart()) {
mNeedRequestlayout |= (mPaddingLeft != newPadding);
mPaddingLeft = newPadding;
} else {
mNeedRequestlayout |= (mPaddingRight != newPadding);
mPaddingRight = newPadding;
}
if (mNeedRequestlayout) {
requestLayout();
mNeedRequestlayout = false;
}
|
protected boolean | verifyDrawable(android.graphics.drawable.Drawable who)
return who == mCheckMarkDrawable || super.verifyDrawable(who);
|