Android 获取编辑文本';s';默认值';来自主题的颜色值

Android 获取编辑文本';s';默认值';来自主题的颜色值,android,android-layout,android-theme,Android,Android Layout,Android Theme,我有一个活动,其中包含3.1上的编辑文本。根据用户输入,我更改EditText中文本的颜色(红色表示错误),然后在文本正常时将其重置为黑色 一个问题涉及改变活动的总体主题。例如,将其从light主题更改为常规的深色主题会导致黑色文本在黑色背景下显示-因此我需要进入并更改代码,而不是在数据正常时将文本重置为白色 如果我对活动进行主题更改,则不必更改此代码,我想知道是否有一种方法可以通过编程方式将给定主题的默认EditText文本颜色拉回来,然后我可以将文本切换回默认颜色,而不是硬编码为白色、黑色等

我有一个
活动
,其中包含3.1上的
编辑文本
。根据用户输入,我更改EditText中文本的颜色(红色表示错误),然后在文本正常时将其重置为黑色

一个问题涉及改变活动的总体主题。例如,将其从light主题更改为常规的深色主题会导致黑色文本在黑色背景下显示-因此我需要进入并更改代码,而不是在数据正常时将文本重置为白色

如果我对活动进行主题更改,则不必更改此代码,我想知道是否有一种方法可以通过编程方式将给定主题的默认EditText文本颜色拉回来,然后我可以将文本切换回默认颜色,而不是硬编码为白色、黑色等。

使用

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

根据使用
获取样式属性直接获取颜色

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

完成后,不要忘记对您的类型Darray调用
recycle()
。该属性不应该像下面的回答那样解析吗?
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();
}