更改 BackgroundDrawable 后,按钮文本不再对齐

Posted

技术标签:

【中文标题】更改 BackgroundDrawable 后,按钮文本不再对齐【英文标题】:Buttons text is not aligned any more after changing the BackgroundDrawable 【发布时间】:2014-02-03 03:15:13 【问题描述】:

我正在以编程方式更改按钮的 backgroundDrawable:

myButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.card_button_blue));

更改背景后,按钮中的文本不再像更改背景之前那样对齐。

(来源:dsliga.eu)

目标 SDK 版本为 10。 谢谢。

【问题讨论】:

你在用 9patch 作为可绘制对象吗?还是普通的 PNG 文件? 我使用的是 9patch PNG。 【参考方案1】:

看起来 setText() 方法弄乱了对齐方式。更改文本后,重新应用重力和填充就可以了:

myButton.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
myButton.setPadding(12, 12, 12, 12);

【讨论】:

仍然不是 100% 满意。这解决了按钮中文本的对齐问题,但按钮会被拉伸。我在表格布局中有 12 个按钮,但是在更改 BackgroundDrawable 后,行中的按钮并不一样大。其中一些比其他的短。【参考方案2】:

由于您使用的是 9patch,因此您需要用底部和右侧的线指定数据在绘图内的位置,您可能没有在 9patch 绘图的底部和右侧绘制完整的线

这就是为什么按钮内的文本不再居中的原因,因为 9patch 的边界不是您认为的那样

你的 9patch 应该(通常),在右侧线的顶部和底部只留下 1 个像素,在底部线的左右各留 1 个像素

重绘9patch,去掉gravity和padding的代码,看看是否有效

见下图

【讨论】:

刚刚添加了 2 条额外的黑线(我只有顶部和左侧的线),但这并没有解决问题。我在按钮中的文本没有正确对齐。我不得不放回重力和填充代码。

以上是关于更改 BackgroundDrawable 后,按钮文本不再对齐的主要内容,如果未能解决你的问题,请参考以下文章

React Test 在状态更改后未按文本查找元素

@ObservedObject 更改后 SwiftUI 视图未更新

长按自定义项 UICollectionViewCell 图像更改

如何在BIOS系统下修改硬盘模式?IDE更改AHCI

在 AVMutableVideoComposition 中创建一个按时间间隔更改的 CATextlayer

按下后退按钮后,从另一个视图控制器更改按钮