Android setBackgroundTintList на предустановленных устройствах

Я работаю с FloatingActionButton. Пользователь должен иметь возможность переключать цвет фона FAB в событии onClick.

Однако рекомендуемый вызов setBackgroundTintList кажется совместимым только с 21+ API.

Как я - правильно - обойтись на устройствах с предварительным леллипом? Есть ли альтернатива, которую я мог бы использовать?

Спасибо заранее.

Ответы

Ответ 1

Вы также можете использовать setSupportBackgroundTintList

Применяет оттенок к выделенному фону. Не меняет текущий режим оттенков, по умолчанию это SRC_IN.

Последующие вызовы в View.setBackground(Drawable) автоматически изменят способ рисования и применит указанный режим оттенков и оттенков.

Также посмотрите ViewCompat.setBackgroundTintList()

Применяет оттенок к выделенному фону.

Это всегда будет действовать при работе на API v21 или новее. При запуске на платформах, предшествующих API v21, он будет действовать, только если представление реализует интерфейс TintableBackgroundView.

Я нашел решение здесь, на SO, которое я использовал до этого и это:

public static void setButtonTint(Button button, ColorStateList tint) {
  if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP && button instanceof AppCompatButton) {
      ((AppCompatButton) button).setSupportBackgroundTintList(tint);
  } else {
      ViewCompat.setBackgroundTintList(button, tint);
  }
}

Это работает для меня. Я надеюсь, что это сработает и для вас.

Ответ 2

просто:

fab.setBackgroundTintList(ColorStateList.valueOf(0xFF4CAF50));

fab - это ваш FloatingActionButton и 0xFF4CAF50 только пример цвета

Ответ 3

Как сказал в комментариях Камиль Северин, я могу подтвердить, что fab.setBackgroundTintList() работает на примере android.support.design.widget.FloatingActionButton.

Я тестировал на Samsung Galaxy s5 (android 6) и Samsung Galaxy s3 (Android 4.3). Оба работают правильно.