Butterknife @BindColor:如何将参数传递给方法并设置 TextView 颜色?

Butterknife @BindColor : How to pass param to method and set TextView Color?

我做错了什么吗?我需要将我必须的整数变量传递给开关。

这个有效(数字):

@BindColor(R.color.white) protected int white;
@BindColor(R.color.black) protected int black;

将整数值作为数字传递

setTextColor(1);

然后,治疗开关:

private void setTextColor(int color){
        switch (color){
            case 1 : {
                textViewUserName.setTextColor(black);
                textViewCardNumber.setTextColor(black);
                break;
            }
            case 2 : {
                textViewUserName.setTextColor(white);
                textViewCardNumber.setTextColor(white);
                break;
            }
        }
    }

但是当我传递 int whiteblack 值时,开关不起作用。为什么?

setTextColor(white);

现在切换id的

private void setTextColor(int color){
        switch (color){
            case R.color.black : {
                textViewUserName.setTextColor(black);
                textViewCardNumber.setTextColor(black);
                break;
            }
            case R.color.white: {
                textViewUserName.setTextColor(white);
                textViewCardNumber.setTextColor(white);
                break;
            }
        }
    }

没有任何反应,textView 颜色没有变化。

我通过停止使用 butterknife 并创建一个 class 来获得所需的颜色来解决我的问题

public static int getColor(Context context, int color) {
    switch (color){
        case 1 : {
            return (context.getResources().getColor(R.color.yellow));
        }
        case 2 : {
            return (context.getResources().getColor(R.color.purple));
        }
        case 3 : {
            return (context.getResources().getColor(R.color.green));
        }
        case 4 : {
            return (context.getResources().getColor(R.color.grey));
        }
        case 5 : {
            return (context.getResources().getColor(R.color.red));
        }
        default : {
            return 0;
        }
    }
}

最后,我只需要像这样设置颜色:

imageView.setColorFilter( ClassHelperCreated.getColor(this, color) );

您只是混淆了两种完全不同的东西:颜色和 ID。

R.color.black 是您在这样的资源文件中创建的颜色的 id #ff000000

由您的 BindColor(或您自己的响应中的 getResources().getColor(R.color.black) 解析的黑色是值为 0xff000000 的整数,即 -16777216

因此,在您的第二个开关中,您传递了一种颜色并将其与 id 进行比较,然后预计您不会输入任何开关情况。

顺便说一句,这个开关是完全没有必要的,因为你在里面所做的只是使用两次值(只使用颜色),但如果你真的想使用开关,你应该使用黑色和白色作为大小写,而不是 R.id.white 和 R.id.black 给定您提供给函数的输入