Butterknife @BindColor: как передать параметр в метод и установить TextView Color? - PullRequest
0 голосов
/ 10 марта 2019

Я что-то не так делаю? Мне нужно передать целочисленные переменные, которые у меня есть, в коммутатор.

Это работает (с номерами):

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

Передача значения типа int как число

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

Теперь переключите идентификатор

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.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Вы просто смешиваете 2 совершенно разные вещи: цвета и идентификаторы.

R.color.black - это идентификатор цвета, созданного вами в файле ресурсов, например: # ff000000

черный, разрешенный вашим BindColor (или getResources (). getColor (R.color.black) в вашем собственном ответе) - это целое число со значением, равным 0xff000000, которое равно -16777216

Итак, во втором переключателе выпередают цвет и сравнивают его с идентификаторами, а затем ожидается, что вы не введете ни одного случая переключения.

Кстати, этот переключатель совершенно не нужен, так как все, что вы делали внутри, использует значение дважды(просто используйте цвет), но если вы действительно хотите использовать переключатель, вы должны использовать черный и белый в качестве случаев, а не R.id.white и R.id.black, учитывая ввод, который вы предоставили своей функции

0 голосов
/ 12 марта 2019

Я решил свою проблему, прекратив использовать нож и создав класс, чтобы получить желаемый цвет

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) );
...