【问题标题】:Change TextInputLayout accent color programmatically以编程方式更改 TextInputLayout 强调色
【发布时间】:2015-09-07 14:17:15
【问题描述】:

我有一个包含 EditText 视图的简单 TextInputLayout。

现在我想知道如何以编程方式更改强调色(下划线、突出显示时的hintTextColor)。 我似乎在 TextInputLayout 中找不到合适的方法。

有什么建议吗?提前致谢。

【问题讨论】:

    标签: android colors


    【解决方案1】:

    恕我直言 InputTextLayout 不能以编程方式更改标签颜色,因为它是由样式设置的。我检查了 InputTextLayout 的源代码并编写了这个创建对私有颜色成员的访问的 hack 辅助方法:

    public static void setInputTextLayoutColor(EditText editText, @ColorInt int color) {
        TextInputLayout til = (TextInputLayout) editText.getParent();
        try {
            Field fDefaultTextColor = TextInputLayout.class.getDeclaredField("mDefaultTextColor");
            fDefaultTextColor.setAccessible(true);
            fDefaultTextColor.set(til, new ColorStateList(new int[][]{{0}}, new int[]{ color }));
    
            Field fFocusedTextColor = TextInputLayout.class.getDeclaredField("mFocusedTextColor");
            fFocusedTextColor.setAccessible(true);
            fFocusedTextColor.set(til, new ColorStateList(new int[][]{{0}}, new int[]{ color }));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    mFocusedTextColor 用于设置内部 CollapsingTextHelper.mCollapsedTextColor 设置标签颜色。

    【讨论】:

    • 谢谢.. 这对我们很有帮助
    • 可以确认,我已经查看了源代码并且他们正在使用样式和属性,所以你不能以编程方式进行。这种基于反射的方法是您的最佳选择。其他选项是复制类并添加辅助方法以编程方式设置颜色。
    • 小心这个sn-p。它假定 TextInputLayout 将是 EditText 的父级。情况并非总是如此,有时它们是中间 FrameLayout。
    • @muthuraj 用于下划线尝试调用 setSupportBackgroundTintList() 方法。为了更改光标颜色,我还使用了从stackoverflow.com/questions/7238450/set-edittext-cursor-color/…访问私人成员的技巧
    • 很遗憾,这不适用于支持库的 28+ 版本。
    【解决方案2】:

    你可以试试这个文字,

    InputTextLayout.getEditText().setHighlightColor(yourColor);
    InputTextLayout.getEditText().setHintTextColor(yourColor);
    

    这用于 EditText 底部的行

    Drawable background = InputTextLayout.getEditText().getBackground();
    DrawableCompat.setTint(background, yourColor);
    InputTextLayout.getEditText().setBackground(background);
    

    希望它有效!

    【讨论】:

    • @sud007 我也试试这个,我确认这不起作用。你可以试试我的解决方案(我在这个问题中的回答),它对我有用。
    • 这适用于背景颜色,但不适用于高光和提示颜色
    猜你喜欢
    • 2018-11-03
    • 2019-11-23
    • 1970-01-01
    • 2019-04-28
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    相关资源
    最近更新 更多