2013-02-21 13 views
5

Volevo personalizzare gli stili per i crostini della mia app. Imposta 4 colori per tutti gli stili. Questa è la mia classe di stili personalizzatiPerché gli stili di crostino personalizzato vengono visualizzati in grigio invece del colore specificato?

public class TapabookCroutonStyle { 
public static final int DURATION_INFINITE = -1; 
public static final Style ALERT; 
public static final Style WARN; 
public static final Style CONFIRM; 
public static final Style INFO; 

public static final int AlertRed = R.color.rojo_vivo; 
public static final int WarnOrange= R.color.naranja_resplandeciente; 
public static final int ConfirmGreen = R.color.verde_lima; 
public static final int InfoYellow = R.color.amarillo_canario; 

private static final int DURATION_SHORT = 3000; 
private static final int DURATION_MEDIUM = 5000; 
private static final int DURATION_LONG = 10000; 


static { 
    ALERT = new Style.Builder() 
       .setDuration(DURATION_LONG) 
       .setBackgroundColorValue(AlertRed) 
       .setHeight(LayoutParams.WRAP_CONTENT) 
       .build(); 
    WARN = new Style.Builder() 
       .setDuration(DURATION_MEDIUM) 
       .setBackgroundColorValue(ConfirmGreen) 
       .setHeight(LayoutParams.WRAP_CONTENT) 
       .build(); 
    CONFIRM = new Style.Builder() 
       .setDuration(DURATION_MEDIUM) 
       .setBackgroundColorValue(ConfirmGreen) 
       .setHeight(LayoutParams.WRAP_CONTENT) 
       .build(); 
    INFO = new Style.Builder() 
       .setDuration(DURATION_MEDIUM) 
       .setBackgroundColorValue(InfoYellow) 
       .setHeight(LayoutParams.WRAP_CONTENT) 
       .build(); 
} 
} 

colori sono impostate nel file color.xml

<color name="verde_lima">#aaee22</color> 
<color name="rojo_vivo">#E8110F</color> 
<color name="naranja_resplandeciente">#FF6600</color> 
<color name="amarillo_canario">#FFCC00</color> 

Io uso involucri di chiamare crostini.

/**    Crouton Wrappers     **/ 
public void croutonAlert(int stringId){ 
    Crouton.makeText(this, stringId, TapabookCroutonStyle.ALERT).show(); 
} 
public void croutonAlert(String text){ 
    Crouton.makeText(this, text, TapabookCroutonStyle.ALERT).show(); 
} 

public void croutonInfo(int stringId){ 
    Crouton.makeText(this, stringId, TapabookCroutonStyle.INFO).show(); 
} 
public void croutonInfo(String text){ 
    Crouton.makeText(this, text, TapabookCroutonStyle.INFO).show(); 
} 

public void croutonConfirm(int stringId){ 
    Crouton.makeText(this, stringId, TapabookCroutonStyle.CONFIRM).show(); 
} 
public void croutonConfirm(String text){ 
    Crouton.makeText(this, text, TapabookCroutonStyle.CONFIRM).show(); 
} 
public void croutonWarn(int stringId){ 
    Crouton.makeText(this, stringId, TapabookCroutonStyle.WARN).show(); 
} 
public void croutonWarn(String text){ 
    Crouton.makeText(this, text, TapabookCroutonStyle.WARN).show(); 
} 

Dal momento che sto usando ActionBarSherlock, il mio appTheme eredita da quello e non dalla Holo. Su una diversa app che usava i crostini standard non poneva problemi. Tuttavia, qui i crostini personalizzati non verranno visualizzati. L'ho provato su una ROM personalizzata 2.2 e su 4.2 (versione google).

L'unica domanda che ho trovato su questo argomento è questo Holo Colors on pre Holo Devices? e non si occupa di stili personalizzati (e il problema non si riproduce su "dispositivi holo" a differenza del mio caso).

Qualcuno sa perché i quattro stili si presentano grigi?

Edit: ho appena provato e regolare (built-in) stili come Style.ALERT fanno mostrare i colori corretti ... Inoltre, ho cambiato i colori riferimenti da R.color.mycolor al loro valore in R (ad esempio, : 0x7f06000c) dal momento che è come la classe di stile originale nella biblioteca Crostino di pane lo fa, e ancora lo stesso grigio traslucido ... ho anche controllato il holo_red_light originale per controllare i valori alfa e li aggiunge ai miei colori personalizzati

<color name="verde_lima">#FFaaee22</color> 
<color name="rojo_vivo">#FFE8110F</color> 
<color name="naranja_resplandeciente">#FFFF6600</color> 
<color name="amarillo_canario">#FFFFCC00</color> 

ma ancora niente.

risposta

3

Si sta utilizzando il metodo setBackgroundColorValue(...) che si aspetta un valore di colore effettivo. Ma stai fornendo un ID risorsa a questo metodo.

Probabilmente si desidera chiamare setBackgroundColor(int resId) che risolve internamente gli ID di risorsa.

+0

Ha funzionato! Ho usato setBackgroundColorValue copiandolo dalla [classe Style originale] (https://github.com/keyboardsurfer/Crouton/blob/master/library/src/de/keyboardsurfer/android/widget/crouton/Style.java) quindi ho ancora non capisco perché funzioni per questo e non per il mio. Ma funziona, ed è quello che importa :) – Frank

+1

La classe Style originale usa _color values_ e non _resource id's_ ;-) – keyboardsurfer

Problemi correlati