Получить значение цвета по умолчанию для EditText из темы - PullRequest
8 голосов
/ 22 декабря 2011

У меня есть Activity, который содержит EditText на 3.1. Исходя из пользовательского ввода, я изменяю цвет текста в EditText (красный для ошибки), а затем сбрасываю его на черный, когда текст в порядке.

Одна проблема связана с изменением общей темы занятия. Например, если заменить его на обычную темную тему из светлой темы, черный текст будет отображаться на черном фоне - поэтому мне нужно пойти и изменить код, вместо этого сбросив текст на белый, когда данные в порядке.

Вместо того, чтобы менять этот код, если я изменяю тему в Activity, мне было интересно, есть ли способ программно изменить цвет текста EditText для данной темы по умолчанию, тогда я могу просто переключить текст обратно на цвет по умолчанию вместо жесткого кодирования в белом, черном и т. д.

Ответы [ 3 ]

11 голосов
/ 08 мая 2014

В соответствии с документами Theme получите цвет напрямую, используя obtainStyledAttributes.

TypedArray themeArray = context.getTheme().obtainStyledAttributes(new int[] {android.R.attr.editTextColor});
try {
    int index = 0;
    int defaultColourValue = 0;
    int editTextColour = themeArray.getColor(index, defaultColourValue);
}
finally
{
    // Calling recycle() is important. Especially if you use alot of TypedArrays
    // http://stackoverflow.com/a/13805641/8524
    themeArray.recycle();
}
8 голосов
/ 22 декабря 2011

Использование R.attr .

setTextColor(android.R.attr.editTextColor)
4 голосов
/ 16 января 2012

EditText.getCurrentTextColor () и EditText.getTextColors () также обеспечит цвет по умолчанию, если вы получите их до изменения цвета. Кроме того, этот подход может быть использован до версии 3.0, что невозможно при использовании android.R.attr.editTextColor.

...