在版本5上使用getBackground().setAlpha的按钮 - 棒棒糖无法正常工作

gro*_*f07 3 android alpha android-button android-5.0-lollipop

我有这个代码,适用于自API 14以来的每个版本,但在Android 5.0(Lollipop)上运行不正常.

下面是我想要按钮出现的方式.

在此输入图像描述


点击button1


buttonArrivals.getBackground().setAlpha(180);
buttonDepartures.getBackground().setAlpha(255);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


点击button2


buttonArrivals.getBackground().setAlpha(255);
buttonDepartures.getBackground().setAlpha(180);
Run Code Online (Sandbox Code Playgroud)

在Lollipop版本上,按钮显示的是相同的Alpha,但我从未设置相同的alpha.我只是使用上面的代码.

更新24/11/2014

这是按钮的xml(AutoResizeButton extends Button)

br.com.timo.gru.util.AutoResizeButton
            android:id="@+id/buttonArrivals"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:background="#00abbd"
            android:drawableLeft="@drawable/icon_aviao_desemb"
            android:drawablePadding="-5dp"
            android:drawableStart="@drawable/icon_aviao_desemb"
            android:gravity="center"
            android:paddingEnd="0dp"
            android:paddingLeft="2dp"
            android:paddingRight="0dp"
            android:text="@string/chegadas"
            android:textColor="@android:color/white"

br.com.timo.gru.util.AutoResizeButton
            android:id="@+id/buttonPartidas"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:background="#00abbd"
            android:drawableLeft="@drawable/icon_aviao_partida"
            android:drawablePadding="-5dp"
            android:drawableStart="@drawable/icon_aviao_partida"
            android:ellipsize="end"
            android:gravity="center"
            android:text="@string/partidas"
            android:textColor="@android:color/white"
Run Code Online (Sandbox Code Playgroud)

Pav*_*dka 8

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

buttonArrivals.getBackground().mutate().setAlpha(180);
buttonDepartures.getBackground().mutate().setAlpha(255);
Run Code Online (Sandbox Code Playgroud)

您还可以阅读Romain Guy关于为什么会发生这种情况的详细解释:http: //curious-creature.org/2009/05/02/drawable-mutations

但是,您似乎尝试使用Android选择器轻松实现某些功能.您可以为每个按钮状态指定不同的颜色(在您选择/未选择的情况下),因此在您的代码中您只需要更新状态:

buttonArrivals.setSelected(true);
buttonDepartures.setSelected(false);
Run Code Online (Sandbox Code Playgroud)

选择器看起来像:

<?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>
Run Code Online (Sandbox Code Playgroud)