# Android TextView drawable居中 站点:答源(https://www.dandroid.cn/) 原文:https://www.dandroid.cn/archives/21853 Canonical:https://www.dandroid.cn/archives/21853 作者:admin 发布日期:2023-11-21 最后更新:2023-11-21 03:07 分类:Android应用源码 / 文本显示 内容类型:post 说明:本页是原文的纯文本镜像,供大模型与检索器完整读取;不含导航、广告、付费框。引用请以上方「原文」链接为准。 ## 正文 Android TextView drawable居中 在Android开发中,TextView是我们经常使用的一个UI控件,常用于显示文本内容。除了文本内容,TextView还可以显示图片,通过drawable属性来实现。然而,有时候我们会遇到一个问题,就是当我们同时设置了文本和图片时,图片的位置可能不是我们期望的居中位置。本文将介绍如何实现在TextView中居中显示drawable。 问题描述 在默认情况下,当我们在TextView中设置了drawable时,drawable会出现在文本的左侧。这在某些情况下可能不是我们期望的效果。例如,我们希望在一个按钮上显示一个图标,并使其居中显示。此时,默认的效果会让图标在按钮的左侧,不够美观。 解决方法 要实现drawable的居中显示,我们可以使用以下两种方法:使用drawablePadding属性或自定义一个居中的Drawable。 方法一:使用drawablePadding属性 TextView提供了一个drawablePadding属性,用于设置drawable与文本之间的间距。默认情况下,这个间距是0。我们可以通过设置一个合适的间距值,来实现drawable的居中显示。 下面是一个示例代码: 在上述代码中,我们通过设置drawablePadding属性为10dp,来使得图标与文本之间有一个间距。这样就能够实现图标居中显示的效果。 方法二:自定义一个居中的Drawable 如果我们想要更加灵活地控制drawable的位置,可以自定义一个居中的Drawable。这种方法需要我们自己创建一个Drawable类,并重写其draw方法来实现居中的效果。 下面是一个示例代码: public class CenterDrawable extends Drawable { private Drawable mDrawable; public CenterDrawable(Drawable drawable) { mDrawable = drawable; } @Override public void draw(Canvas canvas) { int drawableWidth = mDrawable.getIntrinsicWidth(); int drawableHeight = mDrawable.getIntrinsicHeight(); int left = (canvas.getWidth() - drawableWidth) / 2; int top = (canvas.getHeight() - drawableHeight) / 2; int right = left + drawableWidth; int bottom = top + drawableHeight; mDrawable.setBounds(left, top, right, bottom); mDrawable.draw(canvas); } @Override public void setAlpha(int i) { } @Override public void setColorFilter(@Nullable ColorFilter colorFilter) { } @Override public int getOpacity() { return PixelFormat.UNKNOWN; } } 在上述代码中,我们创建了一个CenterDrawable类,继承自Drawable。在draw方法中,我们首先获取了drawable的宽度和高度,然后计算出居中的坐标,最后通过设置drawable的边界和调用draw方法来实现居中显示的效果。 使用这个自定义的Drawable,我们可以在TextView中进行如下设置: Drawable icon = getResources().getDrawable(R.drawable.icon); CenterDrawable centerDrawable = new CenterDrawable(icon); textView.setCompoundDrawablesWithIntrinsicBounds(centerDrawable, null, null, null); 通过以上代码,我们将自定义的居中Drawable应用到TextView中,从而实现了drawable的居中显示。 序列图 下面是一个使用drawablePadding属性的序列图: 通过设置drawablePadding属性,TextView会重新绘制,从而实现了drawable的居中显示。 饼状图 下面是一个使用自定义Drawable的饼状图: 在这个饼状图中,文本和图标所占的比例分别为40%和60%。可以看到,图标所占比例更大,符合我们要实现的居中显示效果。 --- 由 答源 DAN 底座 1.4.0 生成 · 2026-11-08T19:32:24+00:00