Android 自定义TextView实现文字和图片居中显示

Posted xiangzhihong8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 自定义TextView实现文字和图片居中显示相关的知识,希望对你有一定的参考价值。

默认情况下,如果TextView的宽度超过文字的宽度,文字居中显示时,想要在文字的左边或者右边添加一个图片时,左边或者右边的文字就会默认以左边和右边开始排列,效果如下。

如果想要让,文字和图片一起居中显示,那么需要重写onDraw()方法,涉及的代码如下:

 @Override
    protected void onDraw(Canvas canvas) 
        Drawable[] drawables = getCompoundDrawables();
        if (null != drawables) 
            Drawable drawableLeft = drawables[0];
            Drawable drawableRight = drawables[2];
            float textWidth = getPaint().measureText(getText().toString());
            if (null != drawableLeft) 
                setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
                float contentWidth = textWidth + getCompoundDrawablePadding() + drawableLeft.getIntrinsicWidth();
                if (getWidth() - contentWidth > 0) 
                    canvas.translate((getWidth() - contentWidth - getPaddingRight() - getPaddingLeft()) / 2, 0);
                
            
            if (null != drawableRight) 
                setGravity(Gravity.END | Gravity.CENTER_VERTICAL);
                float contentWidth = textWidth + getCompoundDrawablePadding() + drawableRight.getIntrinsicWidth();
                if (getWidth() - contentWidth > 0) 
                    canvas.translate(-(getWidth() - contentWidth - getPaddingRight() - getPaddingLeft()) / 2, 0);
                
            
            if (null == drawableRight && null == drawableLeft) 
                setGravity(Gravity.CENTER);
            
        

        super.onDraw(canvas);
    

然后,再页面中引入我们自定义的TextView即可实现文字和图片的居中显示。

以上是关于Android 自定义TextView实现文字和图片居中显示的主要内容,如果未能解决你的问题,请参考以下文章

Android 手机卫士--自定义控件(获取焦点的TextView)

教你如何实现 Android TextView 文字轮播效果

Android里怎么实现TextView里面的文字一个一个逐渐显示出来的动画效果

Android 简单自定义TextView

Android 文字自动滚动(跑马灯)效果的两种实现方法[特别好使]

android文字横向滚动的自定义view