首页 > 其他 > 详细

自定义控件让TextView、Button的drawableLeft和drawableRight与文本一起居中显示

时间:2014-04-18 08:55:24      阅读:737      评论:0      收藏:0      [点我收藏+]

  TextView的drawableLeft、drawableRight和drawableTop是一个常用、好用的属性,可以在文本的上下左右放置一个图片,而不使用更加复杂布局就能达到,我也常常喜欢用RadioButton的这几个属性实现很多效果,但是苦于不支持让drawbleLeft与文本一起居中,设置gravity为center也无济于事,终于有空研究了一下,这里与大家一起分享。


布局XML

<com.assistant.expand.customview.DrawableCenterButton
                        android:gravity="left|center_vertical"
                        android:drawableLeft="@drawable/icon_erweima"
                        android:drawablePadding="5dp"
                android:id="@+id/btn_scale"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="@android:color/transparent"
                android:singleLine="true"
                android:text="扫描二维码签到"
                android:textColor="@color/color_button2"
                android:textSize="17sp" />



/**
 * drawableLeft与文本一起居中显示
 * 
 * 
 */
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);
    }
}


下面是用Button的Right 例子

/**
 * drawableRight与文本一起居中显示
 * 
 * 
 */
public class DrawableCenterButton extends Button {

	public DrawableCenterButton(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public DrawableCenterButton(Context context, AttributeSet attrs,
	int defStyle) {
		super(context, attrs, defStyle);
	}

	public DrawableCenterButton(Context context, AttributeSet attrs) {
		super(context, attrs);
	}


	@Override
	protected void onDraw(Canvas canvas) {
		Drawable[] drawables = getCompoundDrawables();
		if (drawables != null) {
			Drawable drawableLeft = drawables[2];
				if (drawableLeft != null) {
			
				float textWidth = getPaint().measureText(getText().toString());
				int drawablePadding = getCompoundDrawablePadding();
				int drawableWidth = 0;
				drawableWidth = drawableLeft.getIntrinsicWidth();
				float bodyWidth = textWidth + drawableWidth + drawablePadding;
				setPadding(0, 0, (int)(getWidth() - bodyWidth), 0);
				canvas.translate((getWidth() - bodyWidth) / 2, 0);
			}
		}
		super.onDraw(canvas);
	}
}





自定义控件让TextView、Button的drawableLeft和drawableRight与文本一起居中显示,布布扣,bubuko.com

自定义控件让TextView、Button的drawableLeft和drawableRight与文本一起居中显示

原文:http://blog.csdn.net/catoop/article/details/23947345

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!