У меня есть Android-приложение для астрономии, где мне нужно красить пользовательский интерфейс для использования ночью.Хотя у меня есть схема, которая хорошо работает для многих (большинства ??) элементов пользовательского интерфейса, у меня возникают проблемы с CompoundButtons: CheckBox и RadioButton.
Основная идея состоит в том, чтобы извлечь Drawable для элемента UI иесли он есть, чтобы установить цветной фильтр на него.Моя проблема заключается в поиске подходящего Drawable для составных кнопок.Я бы подумал, что getCompoundDrawables () был бы тем, что мне нужно, но возвращаемый массив для 4 drawables всегда содержит нулевые значения для 4 элементов.
Вот рекурсивный код, который я вызываю в представлении верхнего уровня дляпопытайтесь раскрасить элементы пользовательского интерфейса.
public static void setNightVisionBkg( View view )
{
if ( view instanceof ViewGroup )
{
Drawable drawable = view.getBackground();
if ( drawable != null )
drawable.setColorFilter( 0xFFAA0000, PorterDuff.Mode.MULTIPLY );
ViewGroup group = (ViewGroup) view;
int numChildren = group.getChildCount();
for ( int i = 0; i < numChildren; i++ )
{
View v = group.getChildAt( i );
Drawable d = v.getBackground();
if ( d != null )
d.setColorFilter( 0xFFAA0000, PorterDuff.Mode.MULTIPLY );
if ( v instanceof ViewGroup )
{
setNightVisionBkg( (ViewGroup) v );
}
else if (v instanceof CompoundButton)
{
CompoundButton compBtn = (CompoundButton)v;
Drawable drawables[] = compBtn.getCompoundDrawables();
for (int j = 0; j < drawables.length; j++)
if (drawables[j] != null)
{
drawables[j].setColorFilter( 0xFFAA0000, PorterDuff.Mode.MULTIPLY );
}
}
}
}
}
Обратите внимание, что это последняя часть, где он получает Drawables для CompoundButton, который не работает (все Drawables имеют значение null).
Anyмысли о том, как это сделать?Я знаю, что могу установить свои собственные рисунки, но я бы предпочел использовать стандартные и просто установить colorFilter, если это возможно.