Android setBackgroundTintList on pre-lollipop devices

十年热恋 提交于 2019-11-29 02:20:45

问题


I'm working with FloatingActionButton. The user should be able to switch the FAB background color within a onClick Event.

However, the recommended call to setBackgroundTintList seems to be only compatible from 21+ API.

How do I - correctly - go about it on pre-lollipop devices? Is there any alternative I could use?

Thanks in advance.


回答1:


You can use also 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.

Also take a look on 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.

I found a solution here on SO that I've used before and is this:

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

It works for me I hope it works for you too.




回答2:


simple:

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

fab is your FloatingActionButton of course and 0xFF4CAF50 just a example color




回答3:


From XML, you can use

card_view:backgroundTint="@color/your_color"

where card_view is xmlns:card_view="http://schemas.android.com/apk/res-auto"



来源:https://stackoverflow.com/questions/33638873/android-setbackgroundtintlist-on-pre-lollipop-devices

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!