Итак, я использую textInputLayout, и все, что мне нужно сделать, - это установить пользовательскую отрисовку для значка ошибки. Вот мой макет и зависимость
implementation 'com.google.android.material:material:1.2.0-alpha06'
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="@dimen/text_field_height"
android:layout_margin="@dimen/activity_margin"
android:hint="@string/insert_name_hint"
app:boxBackgroundColor="@color/transparent"
app:boxCornerRadiusBottomEnd="@dimen/text_field_corner"
app:boxCornerRadiusBottomStart="@dimen/text_field_corner"
app:boxCornerRadiusTopEnd="@dimen/text_field_corner"
app:boxCornerRadiusTopStart="@dimen/text_field_corner"
app:errorEnabled="true"
app:errorTextColor="?colorAccent"
app:errorIconDrawable="@drawable/ic_alert_black_24dp"
app:errorIconTint="?colorAccent"
app:errorContentDescription="@string/insert_name_hint"
app:boxStrokeErrorColor="@color/gray"
app:startIconDrawable="@drawable/ic_cool_black_24dp"
app:startIconTint="@color/gray"
app:hintAnimationEnabled="true"
app:hintTextColor="?colorAccent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/nameEvent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:imeOptions="actionDone"
android:maxLength="30"
android:padding="0dp"
android:textAlignment="center"
android:textCursorDrawable="@null"
android:inputType="textCapSentences"/>
</com.google.android.material.textfield.TextInputLayout>
По сути, рисование и оттенки не работают, используются значок и цвет по умолчанию. Остальное работает как надо. Я ничего не устанавливаю программно.