【问题标题】:Get an EditText's 'default' color value from theme从主题中获取 EditText 的“默认”颜色值
【发布时间】:2011-12-22 01:22:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: android android-layout android-theme


    【解决方案1】:

    根据Theme's docs直接使用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();
    }
    

    【讨论】:

    • 完成后不要忘记在 TypedArray 上调用recycle()
    【解决方案2】:

    使用R.attr

    setTextColor(android.R.attr.editTextColor)
    

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 2015-10-28
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 2014-04-24
      • 2011-09-07
      • 2012-04-14
      相关资源
      最近更新 更多