package skin.support.widget; import android.content.Context; import android.support.annotation.DrawableRes; import android.support.v7.widget.AppCompatCheckedTextView; import android.support.v7.widget.TintTypedArray; import android.util.AttributeSet; import skin.support.content.res.SkinCompatResources; import static skin.support.widget.SkinCompatHelper.INVALID_ID; /** * Created by ximsfei on 17-1-14. */ public class SkinCompatCheckedTextView extends AppCompatCheckedTextView implements SkinCompatSupportable { private static final int[] TINT_ATTRS = { android.R.attr.checkMark }; private int mCheckMarkResId = INVALID_ID; private SkinCompatTextHelper mTextHelper; private SkinCompatBackgroundHelper mBackgroundTintHelper; public SkinCompatCheckedTextView(Context context) { this(context, null); } public SkinCompatCheckedTextView(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.checkedTextViewStyle); } public SkinCompatCheckedTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mBackgroundTintHelper = new SkinCompatBackgroundHelper(this); mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr); mTextHelper = new SkinCompatTextHelper(this); mTextHelper.loadFromAttributes(attrs, defStyleAttr); TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs, TINT_ATTRS, defStyleAttr, 0); mCheckMarkResId = a.getResourceId(0, INVALID_ID); a.recycle(); applyCheckMark(); } @Override public void setCheckMarkDrawable(@DrawableRes int resId) { mCheckMarkResId = resId; applyCheckMark(); } @Override public void setBackgroundResource(@DrawableRes int resId) { super.setBackgroundResource(resId); if (mBackgroundTintHelper != null) { mBackgroundTintHelper.onSetBackgroundResource(resId); } } @Override public void setTextAppearance(Context context, int resId) { super.setTextAppearance(context, resId); if (mTextHelper != null) { mTextHelper.onSetTextAppearance(context, resId); } } @Override public void applySkin() { if (mBackgroundTintHelper != null) { mBackgroundTintHelper.applySkin(); } if (mTextHelper != null) { mTextHelper.applySkin(); } applyCheckMark(); } private void applyCheckMark() { mCheckMarkResId = SkinCompatHelper.checkResourceId(mCheckMarkResId); if (mCheckMarkResId != INVALID_ID) { setCheckMarkDrawable(SkinCompatResources.getInstance().getDrawable(mCheckMarkResId)); } } }