天天看点

【Android】自定义控件让TextView的drawableLeft与文本一起居中显示

一、效果图

【Android】自定义控件让TextView的drawableLeft与文本一起居中显示

二、实现代码 

自定义控件

/**

 * drawableLeft与文本一起居中显示

 * 

 * @author 农民伯伯

 * @see http://www.cnblogs.com/over140/p/3464348.html

 */

public class DrawableCenterTextView extends TextView {

    public DrawableCenterTextView(Context context, AttributeSet attrs,

            int defStyle) {

        super(context, attrs, defStyle);

    }

    public DrawableCenterTextView(Context context, AttributeSet attrs) {

        super(context, attrs);

    public DrawableCenterTextView(Context context) {

        super(context);

    @Override

    protected void onDraw(Canvas canvas) {

        Drawable[] drawables = getCompoundDrawables();

        if (drawables != null) {

            Drawable drawableLeft = drawables[0];

            if (drawableLeft != null) {

                float textWidth = getPaint().measureText(getText().toString());

                int drawablePadding = getCompoundDrawablePadding();

                int drawableWidth = 0;

                drawableWidth = drawableLeft.getIntrinsicWidth();

                float bodyWidth = textWidth + drawableWidth + drawablePadding;

                canvas.translate((getWidth() - bodyWidth) / 2, 0);

            }

        }

        super.onDraw(canvas);

}

继续阅读