Как установить цвет в пользовательском представлении, у которого нет функции для этого?

Я хочу использовать пользовательский флажок в моем приложении android, и этот пользовательский флажок не имеет функции для установки цвета, и в примере они устанавливают цвет на xml, используя ( http://schemas.android.com/apk/res-auto) как (приложение) и установить цвет таким образом app:stroke_color="#2196F3" Я хотел бы знать, как установить цвет программно, ссылка для пользовательского флажка https://github.com/lguipeng/AnimCheckBox

1 ответ

Я посмотрел на библиотеку. У них нет setter за stroke_color, Единственный обходной путь здесь заключается в использовании Reflection чтобы получить доступ к этому приватному полю напрямую. Отражение почти всегда плохая практика в Java. Но если вы действительно хотите это сделать, вы можете сделать это следующим образом:

AnimCheckBox checkbox = (AnimCheckBox)findViewById(R.id.checkbox);
try{
  Field field = checkbox.getClass().getDeclaredField("mStrokeColor");
  field.setAccessible(true);
  field.setInt(checkbox,Color.parseColor("#2196F3"));
  checkbox.invalidate();
}
catch (NoSuchFieldException e){
  e.printStackTrace();
}
catch (IllegalAccessException e){
  e.printStackTrace();
}

Вы можете установить цвет круга таким же образом. Для circleColor имя поля mCircleColor,

Другие вопросы по тегам