使用复合可绘制对象在 TextView 中设置实际文本填充

Posted

技术标签:

【中文标题】使用复合可绘制对象在 TextView 中设置实际文本填充【英文标题】:Set actual text padding in TextView with compound drawables 【发布时间】:2012-09-09 10:45:29 【问题描述】:

我有一个ListView 填充有一个ArrayAdapter。对于项目,我只使用一个 TextView 布局。我希望某些行设置复合可绘制对象。

问题:有没有办法为TextView 中包含的实际文本设置填充,这样复合可绘制对象也不会得到填充?其他解决方案是锁定文本的宽度。我需要在我的布局中添加ImageViews 吗?

【问题讨论】:

我也很好奇,你找到解决办法了吗? 不。我刚刚添加了一些ImageViews,这就是我的解决方案。我什至得到了这个问题的Tumbleweed 徽章,所以我想这是不可能的。 哈,有趣。我确实看到了一种在图像上放置填充的方法,而不是在文本上放置填充。 那是哪种方式?我认为setCompoundDrawables 方法为您提供了该选项,请告诉我您的解决方案。 txtView.setCompoundDrawablePadding (int pad);或者您可以设置图像的边界,然后使用 setCompoundDrawablesWithIntrinsicBounds。我现在正在和他们一起玩,看看他们是如何工作的! 【参考方案1】:

很简单:

android:drawablePadding="5dp"

它会根据方向自动使用填充。

【讨论】:

感谢您的回答。那时我已经解决了我的问题,我没有资源来尝试你的方法。 方法仅供参考setCompoundDrawablePadding【参考方案2】:

我将此作为答案发布,以便看到此帖子的人找到答案。

没有直接的方法只为文本设置填充,但您可以为整个 TextView 设置 positive 填充并为可绘制对象设置 negative 填充.

【讨论】:

【参考方案3】:

改进 Gio 的建议,这可能是针对过时的 API/SDK...

TL:DR - 只需应用android:drawablePadding 以增加图像和文本之间的距离。

说明: android:drawablePadding 现在在 CompoundDrawable 和原始 View 之间应用填充,在这种情况下是包含文本的 TextView;

android:padding 和修饰符现在适用于整个组,包括所有化合物。

做消极积极的黑客似乎不再起作用了。

因此,根据可绘制位置(drawableTop/Left/...),填充将应用在与它相反的方向上,紧邻可绘制对象,也就是在两个元素之间。例如,将drawablePadding="10dp" 应用于左侧放置的可绘制对象将具有与使用paddingRight="10dp" 将单个ImageView 设置到TextView 左侧的类似效果(至少在填充方面)。

【讨论】:

我猜它是针对一个过时的 SDK,我还希望有一些旧版支持。当时我想不出比我发布的更好的解决方案。

以上是关于使用复合可绘制对象在 TextView 中设置实际文本填充的主要内容,如果未能解决你的问题,请参考以下文章

如何在xml中设置复合可绘制文本视图的高度和宽度? [关闭]

以编程方式在 TextView 中设置左可绘制对象

仅为 TextView 复合可绘制对象实现 onClick

如何使用复合可绘制对象而不是包含 ImageView 和 TextView 的 LinearLayout

具有拉伸复合可绘制对象的固定宽度 TextView

如何将复合可绘制对象放在文本视图的左上角