天天看點

【Android】自定義控件讓TextView的drawableLeft與文本一起居中顯示

前言

 textview的drawableleft、drawableright和drawabletop是一個常用、好用的屬性,可以在文本的上下左右放置一個圖檔,而不使用更加複雜布局就能達到,我也常常喜歡用radiobutton的這幾個屬性實作很多效果,但是苦于不支援讓drawbleleft與文本一起居中,設定gravity為center也無濟于事,終于有空研究了一下,這裡與大家一起分享。

聲明

歡迎轉載,請注明出處!

部落格園:http://www.cnblogs.com/

農民伯伯: http://www.cnblogs.com/over140/

正文

一、效果圖

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

}

【Android】自定義控件讓TextView的drawableLeft與文本一起居中顯示

和普通textview用法一緻,無需額外增加屬性。

2013-12-13 注意,drawableright不管用!感謝網友提醒,後續有進展了再更新文章。 

結束

那些讓你難受的技術問題一定要找時間想辦法擺平ta! 

轉載:http://www.cnblogs.com/over140/p/3464348.html 

繼續閱讀