提示的字体系列在 TextInputLayout 中无法正常工作

font family for hint not working properly in TextInputLayout

我正在尝试为提示和文本创建不同的字体样式。类似于 this.

到目前为止我的代码:

 <com.google.android.material.textfield.TextInputLayout
    android:id="@+id/filledTextField2"
    style="@style/Widget.TextInputLayout.Primary"
    android:layout_width="233dp"
    android:layout_height="93dp"
    android:layout_marginTop="216dp"
    android:hint="FIRST NAME"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="@style/InputTextFont"
        android:textSize="@dimen/text_input_font_size" />

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

styles.xml

 <style name="Widget.TextInputLayout.Primary" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
    <item name="hintTextAppearance">@style/TextAppearance.App.Caption</item>
    <item name="boxStrokeColor">@color/colorPrimary</item>
    <item name="android:textColorHint">@color/colorSecondary</item>
    <item name="hintTextColor">@color/colorPrimary</item>
    <item name="boxStrokeWidth">@dimen/text_input_box_width</item>
</style>

 <style name="TextAppearance.App.Caption" parent="TextAppearance.AppCompat.Caption">
    <item name="fontFamily">@font/poppins_bold</item>
    <item name="android:fontFamily">@font/poppins_bold</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textAllCaps">true</item>
    <item name="android:textSize">15sp</item>
</style>

  <style name="InputTextFont" parent = "">
    <item name="fontFamily">@font/poppins_regular</item>
    <item name="android:fontFamily">@font/poppins_regular</item>
    <item name="android:textSize">@dimen/text_input_font_size</item>
</style>

稍微玩了一下代码后,“TextAppearance.App.Caption”中的字体大小似乎可以正常工作,这意味着提示的字体大小可以正确更改,但字体系列没有。但是,如果我在“TextInputEditText”中使用“android:fontFamily="@font/poppins_bold",它会起作用,但提示和文本都会变得相同。

我的问题是如何覆盖它们以使用自定义字体? 如果有人帮助我,那将是一个很大的帮助! TIA!

<style name="InputTextFont">
<item name="android:textColor">#fff</item>
<item name="android:textSize">16sp</item>
<item name="android:fontFamily">"#fonts/myfont.ttf"</item>
</style>

根据 this thread,在 XML 文件中设置字体将不起作用,因为它总是被内部 EditText 样式覆盖。

目前在 Kotlin 中的临时解决方法是在创建布局后设置 HintTextAppearance

yourInputLayout.doOnLayout { 
    yourInputLayout
    .setHintTextAppearance(R.style.YourHintStyle)
}

如果您要重用它,将它变成扩展方法总是好的:

fun TextInputLayout.setHintStyle(id: Int) {
    doOnLayout {
        setHintTextAppearance(id)
    }
}

用法:

yourInputLayout.setHintStyle(R.style.YourHintStyle)