package com.ximsfei.skin_autolayout_app; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.ViewGroup; import skin.support.content.res.SkinCompatResources; import skin.support.widget.SkinCompatView; import static skin.support.widget.SkinCompatHelper.INVALID_ID; import static skin.support.widget.SkinCompatHelper.checkResourceId; /** * Created by pengfengwang on 2017/3/16. */ public class SkinCompatDimenView extends SkinCompatView { private int mLayoutHeightResId = INVALID_ID; public SkinCompatDimenView(Context context) { this(context, null); } public SkinCompatDimenView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SkinCompatDimenView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SkinHeightHelper, defStyleAttr, 0); try { if (a.hasValue(R.styleable.SkinHeightHelper_android_layout_height)) { mLayoutHeightResId = a.getResourceId( R.styleable.SkinHeightHelper_android_layout_height, INVALID_ID); } } finally { a.recycle(); } applySkin(); } @Override public void applySkin() { super.applySkin(); mLayoutHeightResId = checkResourceId(mLayoutHeightResId); if (mLayoutHeightResId != INVALID_ID) { String typeName = getResources().getResourceTypeName(mLayoutHeightResId); if ("dimen".equals(typeName)) { ViewGroup.LayoutParams lp = getLayoutParams(); int dimenHeight = getDimen(mLayoutHeightResId); if (lp == null) { lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dimenHeight); } else { lp.height = dimenHeight; } setLayoutParams(lp); } } } private int getDimen(int resId) { int dimen = (int) getResources().getDimension(resId); if (SkinCompatResources.getInstance().isDefaultSkin()) { return dimen; } Resources res = SkinCompatResources.getInstance().getSkinResources(); String resName = res.getResourceEntryName(resId); int targetResId = res.getIdentifier(resName, "dimen", SkinCompatResources.getInstance().getSkinPkgName()); return targetResId == 0 ? dimen : (int) res.getDimension(targetResId); } }