将 android 支持库升级到 28.0.0 后 TextInputLayout 提示颜色不变

Posted

技术标签:

【中文标题】将 android 支持库升级到 28.0.0 后 TextInputLayout 提示颜色不变【英文标题】:TextInputLayout hint color not changing after upgrading android support library to 28.0.0 【发布时间】:2019-05-31 13:00:38 【问题描述】:

将项目中的android支持库升级到28.0.0后,无法更改自定义TextInput的提示颜色

我尝试通过使用取决于状态的可绘制对象来更改颜色,更改 textColor 属性,更改 textColorHint 属性...它们都不起作用,但如果更改其他提示属性,例如文本大小,它会起作用。

只有在EditText不可编辑时才会出现这种情况

我目前的提示风格:

<style name="TextInputHint" parent="@android:style/TextAppearance">
        <item name="android:textColor">@drawable/textinput_hint_color</item>
        <item name="android:textSize">@dimen/textSize14</item>
        <item name="android:gravity">top</item>
        <item name="android:maxLines">4</item>
        <item name="android:inputType">textMultiLine</item>
        <item name="android:scrollbars">vertical</item>
    </style>

还有可绘制的

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/northTexasGreen" android:state_focused="true"/>
    <item android:color="@color/lightSlateGray" android:state_focused="false"/>
</selector>

【问题讨论】:

如何在 TextInputLayout 上设置这个? @EugenPechanec 我在我的自定义 TextInput 类中使用 setHintAppearance 方法来设置它 【参考方案1】:

以下代码适用于 28.0.0

   <android.support.design.widget.TextInputLayout
        android:layout_
        android:layout_
        app:hintTextAppearance="@style/TextInputHint">

        <EditText
            android:layout_
            android:layout_
            android:hint="Checking hint color"
            android:padding="10dp"
            android:textSize="14sp" />
    </android.support.design.widget.TextInputLayout>

<style name="TextInputHint" parent="@android:style/TextAppearance">
    <item name="android:textColor">@drawable/textinput_hint_color</item>
    <item name="android:textSize">@dimen/textSize14</item>
    <item name="android:gravity">top</item>
    <item name="android:maxLines">4</item>
    <item name="android:inputType">textMultiLine</item>
    <item name="android:scrollbars">vertical</item>
</style>

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/northTexasGreen" android:state_focused="true"/>
<item android:color="@color/lightSlateGray" android:state_focused="false"/>
</selector>

【讨论】:

我是这样设置的,但是当我把EditText的focusable属性设置为false时,颜色不是我想要的 如果将 focusable 设置为 false,颜色将永远无法切换到可聚焦状态。如果可以满足您的需要,请尝试将 editable 设置为 false。 这不是问题,调试代码我看到它在内部正确地改变了提示的颜色,但它仍然显示为好像它被禁用了

以上是关于将 android 支持库升级到 28.0.0 后 TextInputLayout 提示颜色不变的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Android Studio 编译时 Kotlin 代码编译报错 ( 升级支持库时处理 @NonNull 参数 )

升级到android后无法构建项目-P

AndroidX迁移实验以及问题解决

Android 迁移到 Androidx

Android 系统源码中添加 androidx 依赖

将SDK版本26更改为28时如何解决Gradle错误