Android 棒棒糖之前的设备上的 setBackgroundTintList

Android setBackgroundTintList on pre-lollipop devices

我正在与 FloatingActionButton 合作。 用户应该能够在 onClick 事件中切换 FAB 背景颜色。

但是,建议调用 setBackgroundTintList 似乎只兼容 21+ API。

我如何 - 正确地 - 在棒棒糖之前的设备上进行操作?我可以使用其他替代方法吗?

提前致谢。

简单:

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

fab 当然是你的 FloatingActionButton0xFF4CAF50 只是一个示例颜色

您也可以使用 setSupportBackgroundTintList

Applies a tint to the background drawable. Does not modify the current tint mode, which is SRC_IN by default.

Subsequent calls to View.setBackground(Drawable) will automatically mutate the drawable and apply the specified tint and tint mode.

也看看 ViewCompat.setBackgroundTintList()

Applies a tint to the background drawable.

This will always take effect when running on API v21 or newer. When running on platforms previous to API v21, it will only take effect if view implement the TintableBackgroundView interface.

我找到了一个我以前用过的解决方案 是这样的:

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);
  }
}

它对我有用我希望它对你也有用。

从XML开始,您可以使用

card_view:backgroundTint="@color/your_color"

其中 card_viewxmlns:card_view="http://schemas.android.com/apk/res-auto"