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

简介:

  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);
	}
}


 


目录
相关文章
|
2月前
|
Java Android开发
TextView设置跑马灯效果
TextView设置跑马灯效果
29 0
|
2月前
|
XML Java Android开发
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
124 1
|
XML Java API
TextView(文本框)详解
本节给大家带来的UI控件是:TextView(文本框),用于显示文本的一个控件,另外声明一点,我不是翻译API文档,不会一个个属性的去扣,只学实际开发中常用的,有用的,大家遇到感觉到陌生的属性可以查询对应的API!
167 0
|
XML 数据格式
简单的TextView滚动跑马灯效果
今天遇到一个需求,需要TextVeiw 滚动显示,于是简单记录一下。
110 0
简单的TextView滚动跑马灯效果
EditText与TextView的开发中的常用属性,打造完美布局
EditText与TextView的开发中的常用属性,打造完美布局
66 0