首页 > 解决方案 > TextInputLayout 错误图标可绘制和错误图标色调未应用给定样式

问题描述

使用如下所示的样式时,我遇到了这个问题:

<style name="TextInputLayoutThemeWarning" parent="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
        <item name="boxStrokeErrorColor">@color/warning_color</item>
        <item name="errorTextColor">@color/warning_color</item>
        <item name="errorIconTint">@color/warning_color</item>
        <item name="errorIconDrawable">@drawable/ic_baseline_warning_24</item>
        <item name="textAppearanceCaption">@style/TextAppearanceTextInputLayout</item>
</style>

当它们在活动中时,它适用于任何 TextInputLayout 但是,当我在片段中的 TextInputLayout 上使用相同的样式时,不会应用可绘制对象和色调。我尝试以编程方式和 XML 代码手动设置 Drawable 和 Tint,似乎这两个属性被忽略并设置为默认值,而不是我选择的那些。

活动的主题是:

<style name="Theme.Default" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:textViewStyle">@style/CondensedFont</item>
</style>

下面是片段布局的一个片段(为清楚起见而减少):

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/clCCS1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background">

    <ScrollView
        android:id="@+id/svCreateCharacter"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:fillViewport="true"
        android:scrollbarSize="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/clInnerContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="visible">

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/tilCharacterName"
                style="@style/TextInputLayoutThemeWarning"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginTop="4dp"
                android:layout_marginEnd="8dp"
                app:boxBackgroundColor="@color/content_background"
                app:errorEnabled="true"
                app:errorTextAppearance="@style/TextAppearanceTextInputLayout"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvCharacterTitle">

                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/tietCharacterName"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="text"
                    android:lines="1"
                    android:maxLines="1"
                    android:textSize="12sp"
                    android:translationZ="4dp" />

            </com.google.android.material.textfield.TextInputLayout>

标签: androidxmlkotlin

解决方案


我发现 Icon Tint 没有应用的原因不是因为样式没有应用,而是我不小心在我的 TextInputLayouts 中添加了一个翻译 z 值。'android:translationZ="4dp"' 会导致图标无法正常显示。


推荐阅读