TextView中drawable和text整体居中

本文介绍如何仅使用一个TextView实现图标与文本的完美居中显示效果,并避免使用复杂的LinearLayout布局。通过调整TextView的属性如gravity、padding及drawablePadding等,可以轻松达到预期的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、效果如下:

2、xml代码:

<TextView
        android:id="@+id/duration"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:background="@drawable/shape_4d000000_15_bg"
        android:paddingStart="12dp"
        android:paddingEnd="12dp"
        android:drawableStart="@drawable/play_small"
        android:drawablePadding="3dp"
        android:includeFontPadding="false"
        android:text="00:00"
        android:gravity="start|center_vertical"
        android:textColor="#ffffff"
        android:textSize="17sp"/>

3、虽然这个UI很简单,但是看到很多人用一个 LinearLayout 里面放 ImageVIew + TextView 去做,先不说过度渲染的问题,光是写这么多代码就有点嫌弃。看到这效果可能很多人首先想到的是TextView,但是在居中上面可能一下子没调试出来,就立马放弃转用布局来做。所以分享此方法,用一个TextVIew完成这个效果。虽然内容要居中,但是解决这问题的关键点是不要设置居中,反而是要把text的gravity设置为左对齐,这样text就会和drawableStart图标靠在一起了,再加上宽度设置为wrap_content,这样TextView的宽度就可以随着text文本的宽自适应。最后再加个左右两边相等的padding,看起来就像是drawable和text整体居中的效果了。举一反三,不管是drawable是在上下左右哪个方向,都可以通过设置text上下左右对齐来达到相应的效果。