为什么自定义的 Crouton 样式显示为灰色而不是指定的颜色?

5

我想要自定义我的应用程序中的醒目提示样式。为四种不同的样式设置四种不同的颜色。这是我的自定义样式类:

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

颜色设置在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>

我使用包装器来调用 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();
}

由于我使用ActionBarSherlock,我的应用程序主题继承自它而不是holo。在另一个使用标准croutons的应用中,这没有问题。然而,在此处使用自定义croutons将无法显示。我在2.2自定义ROM和4.2(google版本)上进行了测试。

关于这个主题,我找到的唯一问题是这个Holo Colors on pre Holo Devices?,它没有处理自定义样式(并且该问题不会在“holo设备”上重现,不像我的情况)。

有人知道为什么四种风格显示为灰色吗?

编辑:我刚刚测试了常规(内置)样式,例如Style.ALERT可以显示正确的颜色...此外,我将颜色引用从R.color.mycolor更改为它们在R中的值(例如:0x7f06000c),因为Crouton库中的原始Style类就是这样做的,但仍然是相同的半透明灰色...我还检查了原始的holo_red_light以检查阿尔法值,并将它们添加到我的自定义颜色中。

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

但是仍然没有任何结果。
1个回答

3

您正在使用方法setBackgroundColorValue(...),该方法需要实际颜色值。 但是您正在向此方法提供资源ID。

您可能想调用setBackgroundColor(int resId),它会在内部解析资源ID。


成功了!我使用了 setBackgroundColorValue,从原始的Style类中复制过来,所以我仍然不明白为什么它对它有效而对我的无效。但是它能用,这才是最重要的 :) - Frank
1
原始的 Style 类使用 颜色值 而不是 资源 ID ;-) - Ben Weiss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接