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 white
或 black
值时,开关不起作用。为什么?
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 给定您提供给函数的输入
我做错了什么吗?我需要将我必须的整数变量传递给开关。
这个有效(数字):
@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 white
或 black
值时,开关不起作用。为什么?
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 给定您提供给函数的输入