Android 带有getBackground()的按钮。版本5上的setAlpha-棒棒糖不是';t工作不正常

Android 带有getBackground()的按钮。版本5上的setAlpha-棒棒糖不是';t工作不正常,android,android-button,alpha,android-5.0-lollipop,Android,Android Button,Alpha,Android 5.0 Lollipop,我有这段代码,适用于自API 14以来的所有版本,但在Android 5.0(棒棒糖)上无法正常工作 下面是我希望按钮的显示方式 单击按钮1 buttonArrivals.getBackground().setAlpha(180); buttonDepartures.getBackground().setAlpha(255); 单击按钮2 buttonArrivals.getBackground().setAlpha(255); buttonDepartures.getBackgrou

我有这段代码,适用于自API 14以来的所有版本,但在Android 5.0(棒棒糖)上无法正常工作

下面是我希望按钮的显示方式


单击按钮1


buttonArrivals.getBackground().setAlpha(180);
buttonDepartures.getBackground().setAlpha(255);


单击按钮2


buttonArrivals.getBackground().setAlpha(255);
buttonDepartures.getBackground().setAlpha(180);
在棒棒糖版本中,按钮显示为相同的Alpha,但我从未设置相同的Alpha。我只是使用上面的代码

更新日期2014年11月24日

以下是按钮的XML(AutoResizeButton扩展按钮)

内部ColorState(由ColorDrawable使用)在这两个按钮(优化)之间共享,因此每当您在一个按钮的背景上更改alpha时,另一个按钮也会得到此更改。 您可以尝试在更改其alpha之前更改背景可绘制:

buttonArrivals.getBackground().mutate().setAlpha(180);
buttonDepartures.getBackground().mutate().setAlpha(255);
你也可以阅读Romain Guy关于为什么会发生这种情况的解释:

然而,看起来您试图实现一些可以通过Android选择器轻松实现的功能。您可以为每个按钮状态指定不同的颜色(在您选择/未选择的情况下),因此在代码中只需更新状态:

buttonArrivals.setSelected(true);
buttonDepartures.setSelected(false);
选择器将如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="#ff00abbd"
        android:state_selected="true" >
    </item>

    <item android:color="#b400abbd"
        android:state_selected="false">
    </item>

</selector>


按钮背景是如何定义的?按钮是什么类型的视图?我怀疑它可能与drawable mutate(请参阅)有关,如果背景定义为drawable,我在问题上添加了按钮的xml。谢谢你的帮助。谢谢帕维尔…变异解决了这个问题!!!!谢谢你关于选择器的提示。我会更新我的项目!!!这是一个很好的答案,因为它直接回答了问题,然后提供了另一个解决方案的见解。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="#ff00abbd"
        android:state_selected="true" >
    </item>

    <item android:color="#b400abbd"
        android:state_selected="false">
    </item>

</selector>