【问题标题】:backgroundTint has not effect on lollipop versionbackgroundTint 对棒棒糖版本没有影响
【发布时间】:2016-02-16 12:35:28
【问题描述】:

我已将视图的 backgroundTint 设置为如下所示,但它对其颜色没有影响。在 xml 设计视图上,它看起来不错,但在设备上却不行。我的设备上有棒棒糖的版本。

compileSdkVersion 和 targetSdkVersion 为 21。

<View
   android:layout_width="35dp"
   android:layout_height="35dp"                     
   android:background="@drawable/circle_appointment_statuses"
   android:backgroundTint="@color/pending" />

【问题讨论】:

标签: android xml android-layout


【解决方案1】:

要在 Lollipop 上的 View (API 21) 上为可绘制的背景着色,请使用 setColorFilter(int color, PorterDuff.Mode mode)

layout.getBackground().setColorFilter(ContextCompat.getColor(context, R.color.color), PorterDuff.Mode.SCR_ATOP)

以下方法不适用于 Lollipop 上的背景可绘制对象。

background.setTint(int color)

DrawableCompat.setTint(Drawable drawable, int color)

【讨论】:

  • 为什么这个答案被否决了?描述的 API 行为是准确的。
  • 这是唯一可以为 Lollipop 中的 ViewGroups 着色背景可绘制对象的方法。
  • 没错!这是唯一的方法,但由于某种原因,这个答案被否决了。
  • 它的PorterDuff.Mode.SRC_ATOP
【解决方案2】:

坏消息

在 Lollipop 5.0(API 级别 21)中为 Button 的背景着色是没有意义的。

好消息

Lollipop 5.1(API 级别 22)似乎通过更改 btn_mtrl_default_shape.xml(以及其他文件)解决了这个问题:https://android.googlesource.com/platform/frameworks/base/+/6dfa60f33ca6018959ebff1efde82db7d2aed1e3%5E!/#F0

好消息

新的支持库(版本 22.1+)adds backward-compatible tinting support 对许多组件,包括 AppCompatButton

不幸的是,android:backgroundTint 属性仍然不起作用(也许我做错了什么)——所以你必须在代码中使用 setSupportBackgroundTintList() 设置 ColorStateList。很高兴看到将来支持 android:backgroundTint。

更多详情请访问这里。Lollipop's backgroundTint has no effect on a Button

【讨论】:

  • 是的,我已经读过了。它有用但不是一个公认的答案。
猜你喜欢
  • 2016-02-04
  • 2015-08-12
  • 2016-10-14
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
相关资源
最近更新 更多