【发布时间】:2012-04-15 14:54:47
【问题描述】:
我遇到了一个奇怪的 Android 问题 - 我想要一个如下所示的按钮:
|-----------------------------------------------------------------------|
| [icon] <5px> [text text text] |
|-----------------------------------------------------------------------|
并且组([icon] [text text text])应该居中。请注意,5px 仅用作您希望在图标和文本之间具有的任何填充的占位符
我在这里找到了一些答案,它们或多或少地围绕着设置背景(我不想这样做,因为我有另一个背景)或使用 android:drawableLeft 属性来设置图标。
但是,setCompoundDrawablesWithIntrinsicBounds 方法的文档看起来有点误导(see here)。它指出图像放置在 TEXT 的左/右/上/下侧,这是不正确的。图标位于 BUTTON 的相应一侧。例如:
设置 android:drawableLeft 属性将图标放在最左边的位置并让我得到这个(重力中心):
|-----------------------------------------------------------------------|
| [icon] [text text text] |
|-----------------------------------------------------------------------|
或者这个(重力向左):
|-----------------------------------------------------------------------|
| [icon] [text text text] |
|-----------------------------------------------------------------------|
两者都丑得要命:(
我找到了一个看起来像这样的解决方法:
public static void applyTextOffset(Button button, int buttonWidth) {
int textWidth = (int) button.getPaint().measureText(button.getText().toString());
int padding = (buttonWidth / 2) - ((textWidth / 2) + Constants.ICON_WIDTH + Constants.ICON_TO_TEXT_PADDING);
button.setPadding(padding, 0, 0, 0);
button.setCompoundDrawablePadding(-padding);
}
它或多或少都有效,但我不喜欢它,原因如下:
- 它需要知道按钮的宽度。使用自动调整大小的按钮,在实际布局完成之前不会知道。 Google 建议在渲染完成后使用侦听器来了解实际宽度,但这会使代码变得非常复杂。
- 我觉得我正在从 Android 布局引擎手中接过布局责任
没有更优雅的解决方案吗?
【问题讨论】:
-
希望你已经解决了你的问题
标签: android image layout button text