从主题中获取EditText的“默认”颜色值

9
我有一个包含EditText的Activity,它运行在3.1上。根据用户输入,我会将EditText中的文本颜色更改为红色(表示错误),当文本正确时则将其重置为黑色。
其中一个问题与更改Activity的整体主题有关。例如,将其从浅色主题更改为普通暗色主题会导致黑色文本显示在黑色背景上 - 因此我需要修改代码,将数据OK时文本重置为白色而不是黑色。
如果我更改Activity的主题而无需更改此代码,我想知道是否有一种编程方式可以动态获取给定主题的默认EditText文本颜色,这样我就可以将文本切换回默认颜色而不是硬编码白色、黑色等颜色。
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
    // https://dev59.com/kGYr5IYBdhLWcg3wRoSW#13805641
    themeArray.recycle();
}

2
在使用完TypedArray后,不要忘记调用recycle()方法。 - iamreptar

8
使用 R.attr
setTextColor(android.R.attr.editTextColor)

1
这个属性不应该像这个答案中所述那样被解决吗?https://dev59.com/Tl7Va4cB1Zd3GeqPKovA#23543990 - petrsyn

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接