@OverrideprotectedvoidonMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (getText().length() == 0) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
int w = iconWidth;
int h = iconHeight;
if (widthMode == MeasureSpec.EXACTLY) {
w = widthSize;
}
if (heightMode == MeasureSpec.EXACTLY) {
h = heightSize;
}
setMeasuredDimension(w, h);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
4.完整代码
classIconTextViewextendsTextView {publicstaticfinalint LEFT = 0, TOP = 1, RIGHT = 2, BOTTOM = 3;
int iconWidth;
int iconHeight;
int iconOrientation = TOP;
public IconTextView(Context context) {
super(context);
setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
setGravity(Gravity.CENTER);
setCompoundDrawablePadding(0);
}
publicvoid setIcon(int resId) {
if (resId > 0) {
final Resources resources = getContext().getResources();
Drawable icon = resources.getDrawable(resId);
int width = iconWidth == 0 ? icon.getIntrinsicWidth() : iconWidth;
int height = iconHeight == 0 ? icon.getIntrinsicHeight() : iconHeight;
icon.setBounds(0, 0, width, height);
switch (iconOrientation) {
case LEFT:
setCompoundDrawables(icon, null, null, null);
break;
case TOP:
setCompoundDrawables(null, icon, null, null);
break;
case RIGHT:
setCompoundDrawables(null, null, icon, null);
break;
case BOTTOM:
setCompoundDrawables(null, null, null, icon);
break;
}
}
}
@Override
protectedvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (getText().length() == 0) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
int w = iconWidth;
int h = iconHeight;
if (widthMode == MeasureSpec.EXACTLY) {
w = widthSize;
}
if (heightMode == MeasureSpec.EXACTLY) {
h = heightSize;
}
setMeasuredDimension(w, h);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}