如何在theme.xml中设置TextInputEditText的字体?

How to set the font of TextInputEditText in theme.xml?

我想将 font 应用到多个 TextInputEditTexts 共同使用的样式。

但是parent里面有TextInputLayout,但是找不到TextInputEditText。 (即使将字体应用于TextInputLayoutTextInputEditText的字体也不会改变)。

TextInputEditText不能继承吗?

我应该只扩展 EditText 来定义样式吗?

<resources xmlns:tools="http://schemas.android.com/tools">
 
    <style name="SignInEditTextStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:minWidth">245dp</item>
        <item name="android:maxWidth">488dp</item>
    </style>
</resources>
<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/login_pwd"
        style="@style/LogInEditTextStyle"
        android:layout_marginTop="100dp"
        android:hint="PWD"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/login_id">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
          />
    </com.google.android.material.textfield.TextInputLayout>

查看 TextInputEditText 的源代码,您要查找的“父级”样式似乎名为 Widget.Design.TextInputEditText:

ThemeEnforcement.obtainStyledAttributes(
    context,
    attrs,
    R.styleable.TextInputEditText,
    defStyleAttr,
    R.style.Widget_Design_TextInputEditText); // <--- this style

或者,您可以利用“默认样式属性”:

public TextInputEditText(@NonNull Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, R.attr.editTextStyle);
}

您可以创建自己选择的样式,然后在 activity 的主题中引用它:

<style name="YourActivityTheme">
    <item name="editTextStyle">@style/YourEditTextStyle</item>
</style>

<style name="YourEditTextStyle">
    <item name="android:minWidth">245dp</item>
    <item name="android:maxWidth">488dp</item>
</style>