这是一个非常令人困惑的问题,因为有太多可用信息,而且我们有很多版本的appcompat支持库似乎会破坏并重复修复。
即使在appcompat支持库23.2.1上,AppCompatButton
属性app:backgroundTint
也无法在Android 5.0上正常运行。它适用于Android 4.4及更低版本以及Android 5.1及更高版本。只有Android 5.0有问题。
那么如何使用在Android 5.0上正确运行的AppCompat支持库来获得有色按钮?
(我将回答我自己的问题。)
答案 0 :(得分:1)
答案 1 :(得分:0)
此答案假定使用appcompat-v7支持库23.2.1。
参考Lollipop's backgroundTint has no effect on a Button,确实无法在Android 5.0中本地修改按钮。 (在Android 5.1中,他们修复了它以便它可以。)
即使不使用appcompat库,<Button android:backgroundTint="..."/>
也不起作用。按钮保持灰色。
检查appcompat版本23.2.1的源代码,似乎兼容性着色仅适用于Android 4.4及更低版本。在Android 5.0及更高版本中,它使用本机着色。不幸的是,这是错误的方式。在Android 5.0上,也应该应用兼容性着色。
您可以通过调用代码中的按钮调用setSupportBackgroundTintList
强制兼容性着色,并且在Android 5.0上正确进行着色。
其中一个可能的解决方案是将AppCompatButton
子类化如下:
public class AppCompatButton2 extends AppCompatButton {
public AppCompatButton2(final Context context, final AttributeSet attrs) {
super(context, attrs);
if (android.os.Build.VERSION.SDK_INT >= 21) {
final ColorStateList csl = getBackgroundTintList();
setSupportBackgroundTintList(csl);
}
}
}