9

我有一个Activity包含EditText3.1 的。根据用户输入,我更改了 EditText 中文本的颜色(红色表示错误),然后在文本正常时将其重置为黑色。

一个问题与改变活动的整体主题有关。例如,将其从浅色主题更改为常规深色主题会导致黑色文本显示为黑色背景 - 所以我需要进入并更改代码,而不是在数据正常时将文本重置为白色。

如果我对 Activity 进行主题更改,而不必更改此代码,我想知道是否有办法以编程方式为给定主题提取默认 EditText 文本颜色,然后我可以将文本切换回默认颜色而不是在白色,黑色等中进行硬编码。

4

3 回答 3

11

根据主题的文档直接使用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();
}
于 2014-05-08T14:00:28.813 回答
8

使用R.attr

setTextColor(android.R.attr.editTextColor)
于 2011-12-22T03:06:40.560 回答
5

如果您在更改颜色之前检索它们, EditText.getCurrentTextColor()EditText.getTextColors()也将提供默认颜色。此外,这种方法可以在 3.0 之前使用,而在使用 android.R.attr.editTextColor 时这是不可能的。

于 2012-01-16T12:37:49.513 回答