2015-04-22 17 views
33

Nella nuova biblioteca AppCompat, siamo in grado di colorare il pulsante in questo modo:Come aggiungere il pulsante tinta di programmazione

 <Button 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/follow" 
      android:id="@+id/button_follow" 
      android:backgroundTint="@color/blue_100" 
      /> 

Come posso impostare la tinta del pulsante di programmazione nel mio codice? praticamente sto cercando di attuare una colorazione condizionale del pulsante sulla base di alcuni input dell'utente

+0

Sei sicuro di Android: backgroundTint sta lavorando su Pre-Lollipop? Eseguo il test sia con Button che con ApCompatButton, ma backgroundTint sembra funzionare solo su Lollipop. – Sharj

+1

Si prega di controllare [questa risposta] (http://stackoverflow.com/a/36006440/2826147). –

risposta

45

Secondo il documentation il metodo relativo al android:backgroundTint è setBackgroundTintList(ColorStateList list)

Aggiornamento

Seguire questa link sapere come creare una risorsa elenco stato colore.

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

poi caricarla utilizzando

setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name)); 

dove contextInstance è un'istanza di un Context


utilizzando AppCompart

btnTag.setSupportButtonTintList(ContextCompat.getColorStateList(Activity.this, R.color.colorPrimary)); 
+0

che non è un colore, ma ColorStateList. Come sfruttare questo? – Stephane

+0

Ho aggiornato la mia risposta –

+1

Ho capito come farlo ora grazie, ma perché Android non consente di usare solo un colore manualmente? Per ogni colore di ogni pulsante che ho, dovrò creare un xml per un ColorStateList? Mi sembra uno spreco. – Stephane

3

Vi siete tri Ed qualcosa di simile?

button.setBackgroundTintList(getResources().getColorStateList(R.id.blue_100)); 

nota che getResources() funzionerà solo in un'attività. Ma può essere chiamato anche in ogni contesto.

+0

questo non funzionerà come R.color.blue_100 è un colore – Stephane

+0

Puoi creare un xml come descritto qui: http : //developer.android.com/reference/android/content/res/ColorStateList.html –

+0

getColorStateList sembra essere deprecato. – cloudsurfin

31

Si potrebbe utilizzare

button.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(R.id.blue_100))); 

ma vi consiglio di utilizzare un supporto biblioteca colorazione drawable che è appena stato rilasciato ieri:

Drawable drawable = ...; 

// Wrap the drawable so that future tinting calls work 
// on pre-v21 devices. Always use the returned drawable. 
drawable = DrawableCompat.wrap(drawable); 

// We can now set a tint 
DrawableCompat.setTint(drawable, Color.RED); 
// ...or a tint list 
DrawableCompat.setTintList(drawable, myColorStateList); 
// ...and a different tint mode 
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER); 

è possibile trovare ulteriori in this blog post (vedere la sezione "colorazione Drawable ")

+2

potresti fornire un codice completo per impostare la tinta usando il tuo metodo? – usman

4

È possibile utilizzare DrawableCompat ad esempio

public static Drawable setTint(Drawable drawable, int color) { 
    final Drawable newDrawable = DrawableCompat.wrap(drawable); 
    DrawableCompat.setTint(newDrawable, color); 
    return newDrawable; 
} 
2

Ho avuto un problema simile. Desideravo colorare uno sfondo disegnabile complesso per una vista basata su un valore di colore (int). sono riuscito utilizzando il codice:

ColorStateList csl = new ColorStateList(new int[][]{{}}, new int[]{color}); 
textView.setBackgroundTintList(csl); 

dove il colore è un valore int che rappresenta il colore desiderato. Questo rappresenta la semplice ColorStateList xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:color="color here"/> 
</selector> 

Spero che questo aiuti.

+2

Livello API richiesto minimo 21 – forsberg

10

Sembra come vista è proprio la meccanica per la gestione del colore, della lista tinta quindi meglio sarà messo:

ViewCompat.setBackgroundTintList(
    editText, 
    ColorStateList.valueOf(errorColor)); 
0

Usa:

favoriteImageButton.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint 
1

Il modo sono riuscito ad ottenere la mia per il lavoro era utilizzando CompoundButtonCompat.setButtonTintList(button, colour).

A mio parere questo funziona indipendentemente dalla versione di Android.

Problemi correlati