2013-02-21 29 views
5

Tôi muốn tùy chỉnh kiểu cho croutons của ứng dụng. Đặt 4 màu cho nhiều kiểu. Đây là lớp phong cách tùy chỉnh của tôiTại sao Kiểu tùy chỉnh crouton xuất hiện dưới dạng màu xám thay vì màu được chỉ định của chúng?

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

Màu sắc được thiết lập trong 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> 

tôi sử dụng giấy gói để gọi croutons.

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

Vì tôi đang sử dụng ActionBarSherlock, appTheme của tôi kế thừa từ đó chứ không phải từ holo. Trên một ứng dụng khác mà sử dụng croutons standar nó đặt ra không có vấn đề. Tuy nhiên, croutons tùy chỉnh ở đây sẽ không hiển thị. Tôi đã thử nghiệm nó trên một ROM tùy chỉnh 2,2 và trên 4,2 (phiên bản google).

Câu hỏi duy nhất tôi tìm thấy về chủ đề này là Holo Colors on pre Holo Devices? và nó không xử lý kiểu tùy chỉnh (và sự cố không tái tạo trên "thiết bị holo" không giống như trường hợp của tôi).

Có ai biết tại sao bốn kiểu hiển thị dưới dạng màu xám không?

Chỉnh sửa: Tôi vừa thử nghiệm và thường xuyên (built-in) phong cách như Style.ALERT làm hiển thị các màu sắc thích hợp ... Ngoài ra, tôi đã thay đổi màu sắc tham chiếu từ R.color.mycolor thành giá trị của chúng trong R (ví dụ : 0x7f06000c) vì đó là cách lớp Phong cách ban đầu trong thư viện Crouton hiện nó, và vẫn là màu xám mờ cùng ... tôi cũng đã kiểm tra các holo_red_light gốc để kiểm tra các giá trị alfa và cho vào màu sắc tùy chỉnh của tôi

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

nhưng vẫn không có gì.

Trả lời

3

Bạn đang sử dụng phương pháp setBackgroundColorValue(...) dự kiến ​​giá trị màu thực tế. Nhưng bạn đang cung cấp Id tài nguyên cho phương thức này.

Bạn có thể muốn gọi setBackgroundColor(int resId) để giải quyết các id tài nguyên nội bộ.

+0

Đã hoạt động! Tôi đã sử dụng setBackgroundColorValue sao chép nó từ [lớp Style gốc] (https://github.com/keyboardsurfer/Crouton/blob/master/library/src/de/keyboardsurfer/android/widget/crouton/Style.java) vì vậy tôi vẫn không hiểu tại sao nó hoạt động cho nó chứ không phải cho tôi. Nhưng nó hoạt động, và đó là những gì quan trọng :) – Frank

+1

Lớp Kiểu gốc sử dụng _color values_ và không _resource id's_ ;-) – keyboardsurfer

Các vấn đề liên quan