子类 TextInputLayout 使用损坏的主题

Subclass TextInputLayout uses broken theme

我需要对 TextInputLayout 进行子类化以提供自定义行为。但是,即使 body 为空,布局也会从某处选取不同的主题。如果我能够覆盖主题,我不会太担心,但这个主题直接被打破了,例如error drawable 不会显示。

原版布局:

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/login_username_input_layoutz"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/login_username_hint">

                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/login_username_input_textz"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />

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


子类布局:

import android.content.Context
import android.util.AttributeSet
import com.google.android.material.textfield.TextInputLayout

class CustomTextInputLayout @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : TextInputLayout(context, attrs, defStyleAttr) {}

            <somepackage.CustomTextInputLayout
                android:id="@+id/login_username_input_layoutz"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/login_username_hint">

                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/login_username_input_textz"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />

            </somepackage.CustomTextInputLayout >


Material 设计导入:com.google.android.material:material:1.2.0

Parent 应用主题:Theme.MaterialComponents.Light.NoActionBar

在构造函数中使用 defStyleAttr: Int = R.attr.textInputStyle 而不是 defStyleAttr: Int = 0