相对于TextView的drawableLeft图像垂直居中文本

59

我有这个组件:

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

drawableLeft属性中的图片比文本字体要大,因此我希望文本在垂直方向上与图片居中对齐。如何实现这一效果?

4个回答

129

你想要的是“gravity”,注意这与布局重力(layout gravity)不同,布局重力会移动整个文本视图,而重力则是移动文本视图内的文本。

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

1
谢谢,我之前尝试了layout_gravity但没成功,不知道其中的区别,现在没问题了。 - user940016

86

除了设置重力外,这也可以通过减少TextView顶部和底部的填充来帮助一些情况下的对齐,从而使文本视图更加对称:

android:includeFontPadding="false"

12
谢谢,android:gravity与此结合使用解决了我的问题! - joscarsson
2
是的,它也帮助了我!非常感谢你! - Eugene Biryukov
1
这救了我一命!谢谢。 - Akshay Sunderwani

6

如果你不在意文本重音,可以尝试使用android:includeFontPadding="false"。这将去除TextView的额外顶部和底部填充。

至于android:gravity="center_vertical",它对我的代码没有影响。


-1

你应该将DrawableTextView都放在一个RelativeLayout中,并在你的TextView上使用layout_alignBaseline属性。

你也可以将这两个元素,DrawableTextView,放在一个LinearLayout中,设置horizontal方向、layout_height="wrap_content",并在你的TextView上使用layout_gravity="center_vertical"属性。


使用android:gravity会是一种更加干净和快速的方法,虽然这会给你更多的灵活性来动态调整图片大小等。 - Merkidemis
谢谢你,我不想使用drawableLeft,因为图标太小了,我想要一个ImageButton。我一直在调整边距,直到看到了你的答案。点赞。 - span

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接