如何使 TextInputLayout 的浮动标签变为粗体

Posted

技术标签:

【中文标题】如何使 TextInputLayout 的浮动标签变为粗体【英文标题】:How to make floating label bold for TextInputLayout 【发布时间】:2017-03-01 10:47:35 【问题描述】:

我有一个TextInputLayout。我尝试应用自定义hintTextAppearance 样式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_
    android:layout_
    android:paddingLeft="@dimen/wizard_horizontal_margin"
    android:paddingRight="@dimen/wizard_horizontal_margin"
    android:paddingTop="@dimen/wizard_vertical_margin"
    android:paddingBottom="@dimen/wizard_vertical_margin">

    <TextView
        android:paddingBottom="@dimen/wizard_vertical_margin"
        android:text="What's your email address?"
        android:layout_
        android:layout_
        android:textColor="?attr/wizardTextViewColor"
        android:textSize="18sp"
        android:id="@+id/text_view" />

    <android.support.design.widget.TextInputLayout
        app:hintTextAppearance="@style/WizardTextInputLayout"
        android:id="@+id/text_input_layout"
        android:layout_
        android:layout_ >
        <EditText
            android:layout_
            android:layout_
            android:inputType="textEmailAddress"
            android:hint="Email address"
            android:id="@+id/email_edit_text" />
    </android.support.design.widget.TextInputLayout>
</LinearLayout>

我尝试通过应用以下自定义样式使文本变为粗体。

<style name="WizardTextInputLayout" parent="TextAppearance.Design.Hint">
    <item name="android:textStyle">bold</item>
</style>

但是,在应用自定义样式之前和之后看起来没有什么不同。

自定义hintTextAppearance之前的样式

自定义hintTextAppearance后样式

我可以确认样式有效。因为,如果我在WizardTextInputLayout 样式中添加android:textSize 属性,我可以看到浮动标签文本大小发生了变化。

但是,为什么将浮动标签文本设为粗体不起作用?我可以尝试使浮动标签文本变粗吗?

【问题讨论】:

嘿,哥们,你能解决这个问题吗? 【参考方案1】:

更新

由于为 textinputLayout 设置自定义字体会影响其管理的提示文本外观和样式,您可以使用TextInputLayoutsetHintTextAppearance(int resId) 方法,并提供自定义文本样式xml,以解决该问题.

原答案

您可以创建一个自定义类,扩展 TextInputLayout 类并覆盖 setTypeFace() 方法:

    @Override
public void setTypeface(@Nullable Typeface typeface) 
    setTypeface(Your_Bold_typeface);

您应该在哪里设置从所需字体的粗体版本创建的字体。

【讨论】:

它将浮动文本更改为粗体。但是,它也会引入另一个不需要的副作用。它也会改变提示文本的字体(EditText中没有任何内容时的文本)。 您可以使用 textinputlayout.setHintTextAppearance(int resId) 为由它管理的提示提供特定的文本样式。 setHintTextAppearance 只能更改文字大小,不能更改粗体。

以上是关于如何使 TextInputLayout 的浮动标签变为粗体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spinner 上添加浮动标签

TextInputLayout的基本使用

TextInputLayout 和 AutoCompleteTextView

3分钟学会TextInputLayout

使用 TextInputLayout 时更改 EditText 提示颜色

TextInputLayout 在用户关注它之前不显示 EditText 提示