Можно ли программно изменять размер FloatingActionButton во время выполнения?

Я использую FloatingActionButton из библиотеки поддержки. Я заметил, что размер может быть изменен только в XML, используя атрибут app: fab_size = "".

Я посмотрел на исходный код и нет методов, которые позволили бы изменить размер потрясающего, когда приложение работает.

Я просто хочу изменить размер fab между MINI и NORMAL в зависимости от пользовательского ввода, поэтому мне нужно делать это программно.

Кто-нибудь еще нашел способ сделать это?

2 ответа

Решение

Это невозможно. Размер определяется по FloatingActionButton создание и остается статичным в течение своего жизненного цикла. Нет открытых методов, позволяющих динамически изменять размер. Конечно, вы могли бы использовать java reflection для того, чтобы получить доступ к частным size а также padding поля и изменить их, но это not a good идея. Кроме того, вы можете взглянуть на какую-то стороннюю реализацию, которая позволяет динамически изменять размер кнопки, например

Я думаю FloatingActionButtonsetSize() метод делает то, что вы хотите. Если у тебя есть FloatingActionButton называется fab, ты можешь использовать:

fab.setSize(FloatingActionButton.SIZE_MINI);
fab.setSize(FloatingActionButton.SIZE_NORMAL);

Вы можете использовать setCustomSize(), этот метод просто меняет свойство customSize, поэтому вы должны запросить request после изменения customSize.

public void setCustomSize(@Px int size) {
    if (size < 0) {
        throw new IllegalArgumentException("Custom size must be non-negative");
    } else {
        this.customSize = size;
    }
}

Код ниже должен изменить размер.

fab.setCustomSize(size);
fab.requestLayout(); 
Другие вопросы по тегам