Android 如何通过编程更改开关颜色?

Android 如何通过编程更改开关颜色?,android,android-layout,android-togglebutton,Android,Android Layout,Android Togglebutton,我在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">

我在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>
但是下面的实现并没有改变圆形开关按钮的颜色。它总是采用默认的主题颜色

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

您只需在可绘制对象上应用
颜色过滤器
,如下所示:

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

  break;

您可以对
getthumbdravable()
getBackground()

执行相同的操作。它的可能副本不会重复。实际上,我是通过编程而不是xml来提问的。
case USER_TYPE_SU:
 int color = ContextCompat.getColor(this,R.color.colorSU)            
 toggleButton.getTrackDrawable().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);

  break;