Я застрял в странной проблеме с Android -Я хочу, чтобы кнопка выглядела так:
|-----------------------------------------------------------------------|
| [icon] <5px> [text text text] |
|-----------------------------------------------------------------------|
и группа ([icon] [text текст text])должен располагаться по центру. Обратите внимание, что 5px используется только в качестве заполнителя для любого отступа, который вы хотите иметь между значком и текстом
. Я нашел здесь несколько ответов, которые более или менее тяготеют к настройке фона (, чего я не хочу. сделать, потому что у меня есть другой фон)или использование свойства android:drawableLeft для установки значка.
Однако похоже, что документация метода setCompoundDrawablesWithIntrinsicBounds немного вводит в заблуждение(см. здесь). В нем говорится, что изображение размещено слева/справа/сверху/снизу от ТЕКСТА, что неверно. Значок размещается на соответствующей стороне КНОПКИ. Например,:
Установка свойства 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);
}
И он работает более или менее, но мне он не нравится по следующим причинам:
Нет ли более элегантного решения?