2013-02-21 15 views
5

Chciałem dostosować style dla grzanek mojej aplikacji. Ustaw 4 kolory dla tylu stylów. To jest moja klasa niestandardowe styleDlaczego niestandardowe style crouton są wyświetlane jako szare, zamiast ich określonego koloru?

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(); 
} 
} 

Kolory są ustawione w pliku 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> 

używam owijarki zadzwonić grzankami.

/**    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(); 
} 

Ponieważ używam ActionBarSherlock, mój appTheme dziedziczy od tego, a nie z holo. W innej aplikacji, która używała standardowych grzanek, nie stanowiła problemu. Jednak niestandardowe grzanki tutaj nie będą wyświetlane. Przetestowałem to na 2.2 ROM-ie i 4.2 (wersja Google).

Jedyne pytanie, które znalazłem na ten temat, to: Holo Colors on pre Holo Devices? i nie dotyczy niestandardowych stylów (a problem nie jest odtwarzany na "urządzeniach hologramów" w przeciwieństwie do mojego przypadku).

Czy ktoś wie, dlaczego te cztery style są wyświetlane jako szare?

Edytuj: Właśnie testowałem i zwykłe (wbudowane) style, takie jak Style.ALERT, pokazują odpowiednie kolory ... Zmieniłem również odniesienia kolorów z R.color.mycolor na ich wartość w R (np. : 0x7f06000c), ponieważ jest to w jaki sposób oryginalny styl w bibliotece klasy crouton robi, i wciąż ten sam półprzezroczysty szaro ... ja również sprawdzone oryginalne holo_red_light aby sprawdzić wartości alfa i dodaje je do moich niestandardowych kolorach

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

ale wciąż nic.

Odpowiedz

3

Używasz metody setBackgroundColorValue(...), która oczekuje rzeczywistej wartości koloru. Ale podajesz identyfikator zasobu tej metody.

Prawdopodobnie chcesz zadzwonić pod numer setBackgroundColor(int resId), który wewnętrznie rozwiązuje identyfikatory zasobów.

+0

Zadziałało! Użyłem setBackgroundColorValue kopiowania go z [oryginalnej klasy stylu] (https://github.com/keyboardsurfer/Crouton/blob/master/library/src/de/keyboardsurfer/android/widget/crouton/Style.java), więc nadal nie rozumiem, dlaczego to działa, a nie moje. Ale działa, i to się liczy :) – Frank

+1

Oryginalna klasa stylów używa _color values_, a nie _resource id's_ ;-) – keyboardsurfer