2015-11-10 9 views
16

Sto lavorando con FloatingActionButton. L'utente dovrebbe essere in grado di cambiare il colore di sfondo FAB all'interno di un evento onClick.Android setBackgroundTintList su dispositivi pre-lollipop

Tuttavia, la chiamata consigliata a setBackgroundTintList sembra essere compatibile solo con 21+ API.

Come si fa, correttamente, sui dispositivi pre-lecca-lecca? C'è qualche alternativa che potrei usare?

Grazie in anticipo.

+1

Prova questo [risposta] (http://stackoverflow.com/a/30313299/4385913) –

+0

@Skizo Grazie! Non ero a conoscenza di tale chiamata ViewCompat (né di setSupportBackgroundTintList). Per favore scrivi la tua risposta in modo che io possa contrassegnarla come accettata! – Matteo

+0

Fine Matteo: D ... –

risposta

25

È possibile utilizzare anche setSupportBackgroundTintList

Applica una tinta allo sfondo drawable. Non modifica la modalità tinta corrente, che è SRC_IN per impostazione predefinita.

Le chiamate successive a View.setBackground (Drawable) modificano automaticamente il drawable e applicano la modalità tinta e tinta specificata.

prendere anche uno sguardo sul ViewCompat.setBackgroundTintList()

Si applica una tinta allo sfondo drawable.

Questo avrà sempre effetto durante l'esecuzione su API v21 o più recente. Quando si esegue su piattaforme precedenti all'API v21, avrà effetto solo se la vista implementa l'interfaccia TintableBackgroundView.

ho trovato una soluzione here on SO che ho usato prima e è questo:

public static void setButtonTint(Button button, ColorStateList tint) { 
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP && button instanceof AppCompatButton) { 
     ((AppCompatButton) button).setSupportBackgroundTintList(tint); 
    } else { 
     ViewCompat.setBackgroundTintList(button, tint); 
    } 
} 

Funziona per me spero che funziona anche per te.

+0

Perfetto! Proprio quello che stavo cercando! Grazie – Matteo

+0

Grazie upvote e segnalo come risposta corretta se fosse quello di cui avevi bisogno: P Felice di sentirlo. –

+1

Ma FloatingActionButton non implementa TintableBackgroundView, in modo che il ViewCompat.setBackgroundTintList() non funziona per l'API <21 – lage

6

semplice:

fab.setBackgroundTintList(ColorStateList.valueOf(0xFF4CAF50)); 

fab è il vostro FloatingActionButton di corso 0xFF4CAF50 solo un colore esempio

+0

Penso che tu non abbia capito cosa intendevo. Controlla la risposta @Skizo per ulteriori chiarimenti. Grazie a proposito! :) – Matteo

+0

è compatibile con le versioni precedenti –

+1

@Matteo L'implementazione FAB proviene dal supporto lib e supporta la compatibilità con le versioni precedenti. Sotto 'setBackgroundTintList()' sta usando diversi impl per pre-lolipop. Provato sul dispositivo KitKat. –

0

Come ha detto Kamil Seweryn nei commenti, posso confermare che fab.setBackgroundTintList() funziona su android.support.design.widget.FloatingActionButton.

Ho provato su Samsung Galaxy s5 (Android 6) e Samsung Galaxy s3 (Android 4.3). Entrambi funzionano correttamente.