Изменить цвет значка переключателя с кода Java

Я хочу изменить цвет значка "переключатель" из кода Java, а не из XML, так как переключатель создается динамически. Минимальный SDK 16. Помощь будет высоко ценится.

    Switch aSwitch = new Switch(context);
    holder.llSwitch.addView(aSwitch); 
    holder.navIcon.setText(context.getResources().getString(R.string.fa_bell_o));

1 ответ

Решение

Вы можете проверить, кнопка проверена или нет, и установить цвет с состоянием

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear_layout);
Switch mySwitch = new Switch(this);
linearLayout.addView(mySwitch);
mySwitch.setBackgroundColor(Color.BLACK);
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        if (isChecked)
            buttonView.setBackgroundColor(Color.RED);
        else buttonView.setBackgroundColor(Color.BLACK);
    }
});

Так как вы портите Switch а также ToggleButton проверить этот ответ Переключение против переключения

Изменить: только для изменения цвета большого пальца вы можете попробовать, как показано ниже

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear_layout);
final Switch mySwitch = new Switch(this);
linearLayout.addView(mySwitch);
mySwitch.getThumbDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        if (isChecked)
            mySwitch.getThumbDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
        else
            mySwitch.getThumbDrawable().setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY);
    }
});
Другие вопросы по тегам