閱讀34 返回首頁    go 阿裏雲 go 技術社區[雲棲]


自定義控件讓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:
                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);
	}
}





最後更新:2017-04-03 12:56:20

  上一篇:go poj 1552 Doubles【goto語句】
  下一篇:go IOS各種手勢的使用