Как программно изменить цвет переключателя? - PullRequest
0 голосов
/ 03 мая 2018

У меня есть пять разных цветов в colors.xml.

<color name="colorSU">#4130f0</color>
<color name="colorBM">#ff752d</color>
<color name="colorTM">#2a8cbd</color>
<color name="colorBE">#7400d5</color>
<color name="colorSE">#22B573</color>

Теперь мне нужно применить это в переключателе «кнопка» на. (Круглый переключатель)

toggleButton = (Switch)view.findViewById(R.id.switch_filter);
toggleBtnUserRoleDrawable();

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

 private void toggleBtnUserRoleDrawable() {
        String userRole = AppUtils.getUserRole(mSharedPreferences);
        switch (userRole) {
            case USER_TYPE_SE:
               // toggleButton.setBackground(getResources().getDrawable(R.drawable.toggle_button_se));
                //toggleButton.setTrackDrawable(getResources().getDrawable(R.color.colorSE));
                break;
            case USER_TYPE_TM:
                toggleButton.setBackground(getResources().getDrawable(R.drawable.colorTM));
                toggleButton.setTrackDrawable(getResources().getDrawable(R.color.colorTM));
                break;
            case USER_TYPE_BM:
                toggleButton.setBackground(getResources().getDrawable(R.drawable.colorBM));
                toggleButton.setTrackDrawable(getResources().getDrawable(R.color.colorBM));
                break;
            case USER_TYPE_BE:
                toggleButton.setBackground(getResources().getDrawable(R.drawable.colorBM));
                toggleButton.setTrackDrawable(getResources().getDrawable(R.color.colorBE));
                break;
            case USER_TYPE_SU:
                toggleButton.setBackground(getResources().getDrawable(R.drawable.colorSU));
                toggleButton.setTrackDrawable(getResources().getDrawable(R.color.colorSU));
                break;
        }
    }

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете просто применить ColorFilter к рисуемому объекту следующим образом:

case USER_TYPE_SU:
 int color = ContextCompat.getColor(this,R.color.colorSU)            
 toggleButton.getTrackDrawable().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);

  break;

Вы можете сделать то же самое для getThumbDrawable() и getBackground()

...