Центрирование текста TextView по вертикали относительно его рисунка drawableLeft

У меня есть этот компонент:

<TextView
    android:id="@+id/item_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/icon" />

Изображение в атрибуте drawableLeft больше, чем шрифт текста, поэтому я хочу, чтобы текст был центрирован по вертикали относительно изображения. Как я могу получить этот эффект?

Ответ 1

Вы хотите, чтобы "гравитация" означала, что это не следует путать с гравитацией макета, гравитация макета перемещает весь текст, а гравитация перемещает текст в текстовом представлении.

<TextView
    android:id="@+id/item_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/icon"
    android:gravity="center_vertical" />

Ответ 2

В дополнение к настройке силы тяжести это также может помочь с выравниванием в некоторых ситуациях, уменьшая прокладки сверху и снизу текста, что может быть неравным:

android:includeFontPadding="false"

Ответ 3

Если вам не android:includeFontPadding="false" текстовые акценты, просто попробуйте android:includeFontPadding="false" Это позволит удалить дополнительное верхнее и нижнее дополнение TextView. Что касается android:gravity="center_vertical", это не влияет на мой код.

Ответ 4

Вы должны разместить как Drawable и TextView внутри RelativeLayout и использовать атрибут layout_alignBaseline в TextView.

Вы также можете разместить только два элемента: Drawable и TextView внутри LinearLayout с horizontal ориентацией и layout_height="wrap_content" и использовать layout_gravity="center_vertical" в вашем TextView.