Sto usando setColorFilter
per impostare il filtro colore di UNO dei miei pulsanti. Questo ha funzionato perfettamente fino all'aggiornamento di Android 5.0 Lollipop. Ora, il filtro colore sembra trapelare sugli altri miei pulsanti, anche quando chiudo l'attività e lo riapre (si reimposta se chiudo l'app e lo riapre).Lollipop Android 5.0: setColorFilter "perde" su altri pulsanti
mio styles.xml (V21): (lo stesso vecchio, tranne qui suo genitore è materiale, prima che fosse Holo)
<style name="Theme.FullScreen" parent="@android:style/Theme.Material.Light.NoActionBar.Fullscreen">
<item name="android:buttonStyle">@style/StandardButton</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
mio styles.xml (per tutte le versioni):
<style name="StandardButton" parent="android:style/Widget.Button">
<item name="android:background">@android:drawable/btn_default</item>
</style>
My Button:
<Button
android:id="@+id/mainMenuButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="mainMenu"
android:text="@string/button_mainMenu"
android:visibility="gone" />
Il mio codice:
Button mainMenuButton = (Button) findViewById(R.id.mainMenuButton);
mainMenuButton.getBackground().setColorFilter(new PorterDuffColorFilter(getResources().getColor(R.color.light_green), PorterDuff.Mode.MULTIPLY));
mainMenuButton.setVisibility(View.VISIBLE);
Il colore:
<color name="light_green">#5CD65C</color>
Il risultato:
apro l'applicazione, quindi l'attività di gioco e tutti i pulsanti sono visualizzazione corretta. Premo il pulsante per impostare il filtro colore, tornare al menu principale e riaprire l'attività di gioco e ora tutti i pulsanti sono verdi.
Qualche idea?
Quando ho letto la tua risposta sono saltato di gioia, poiché sembrava così semplice e intuitivo (non avevo mai sentito parlare di 'mutate()' prima). Mi sono precipitato al mio progetto e ho implementato la tua soluzione e purtroppo non funziona. Tutti i miei pulsanti diventano ancora verdi. Ho anche provato: 'background = background.mutate();' e quindi impostare il filtro su quello, ma i pulsanti diventano ancora verdi. Non so che altro provare (oltre a chiamare 'clearFilter()' su tutti gli altri pulsanti, che funziona, ma è davvero brutto da un codice). – Johis