101

这可能看起来违反直觉,但有没有办法禁用或删除浮动标签提示TextInputLayout?我想使用TextInputLayout而不是仅仅使用 an的原因EditText是提供的计数器TextInputLayout

这是我到目前为止所拥有的:

<android.support.design.widget.TextInputLayout
            android:id="@+id/textContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            app:counterEnabled="true"
            app:counterMaxLength="100">

            <EditText
                android:id="@+id/myEditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" 
                android:gravity="top|left"
                android:inputType="textMultiLine|textCapSentences"
                android:maxLength="100"
                android:scrollbars="vertical"
                android:hint="This is my cool hint"/>

        </android.support.design.widget.TextInputLayout>
4

11 回答 11

236

从支持库的 23.2.0 版本开始,您可以调用

setHintEnabled(false)

或将其放入您的 TextInputLayout xml 中:

app:hintEnabled="false"

尽管该名称可能会让您认为它删除了所有提示,但它只是删除了浮动提示。

相关文档和问题: http: //developer.android.com/reference/android/support/design/widget/TextInputLayout.html#setHintEnabled(boolean)

https://code.google.com/p/android/issues/detail?id=181590

于 2016-04-27T17:10:12.927 回答
58

可能有三种方法可以实现这一目标:

1设置android:hintTextInputLayout空格_字符,并保持android:hint="This is my cool hint"设置在EditText.

<android.support.design.widget.TextInputLayout
    ....
    ....
    android:hint=" ">       <<----------

    <EditText
        ....
        ....
        android:hint="This is my cool hint"/>    <<----------

</android.support.design.widget.TextInputLayout>

这是有效的,因为在使用提示TextInputLayout之前执行以下检查:EditText's

// If we do not have a valid hint, try and retrieve it from the EditText
if (TextUtils.isEmpty(mHint)) {
    setHint(mEditText.getHint());
    // Clear the EditText's hint as we will display it ourselves
    mEditText.setHint(null);
}

通过设置android:hint=" "if (TextUtils.isEmpty(mHint))评估为false,并且EditText保留其提示。

2第二种选择是子类化TextInputLayout并覆盖其addView(View child, int index, ViewGroup.LayoutParams params)方法:

public class CTextInputLayout extends TextInputLayout {

    public CTextInputLayout(Context context) {
        this(context, null);
    }

    public CTextInputLayout(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void addView(View child, int index, ViewGroup.LayoutParams params) {
        if (child instanceof EditText) {
            // cache the actual hint
            CharSequence hint = ((EditText)child).getHint();
            // remove the hint for now - we don't want TextInputLayout to see it
            ((EditText)child).setHint(null);
            // let `TextInputLayout` do its thing
            super.addView(child, index, params);
            // finally, set the hint back
            ((EditText)child).setHint(hint);
        } else {
            // Carry on adding the View...
            super.addView(child, index, params);
        }
    }
}

然后使用您的自定义CTextInoutLayout而不是设计支持库中的自定义:

<your.package.name.CTextInputLayout
    ....
    .... >       <<----------

    <EditText
        ....
        ....
        android:hint="This is my cool hint"/>    <<----------

</your.package.name.CTextInputLayout>

3第三,也可能是最直接的方法是进行以下调用:

// remove hint from `TextInputLayout`
((TextInputLayout)findViewById(R.id.textContainer)).setHint(null);
// set the hint back on the `EditText`
// The passed `String` could also be a string resource
((EditText)findViewById(R.id.myEditText)).setHint("This is my cool hinttt.");
于 2016-03-05T20:37:04.923 回答
29

使用 com.google.android.material 你可以隐藏

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

               ....

               app:hintAnimationEnabled="false"
               app:hintEnabled="false"
               >

                <com.google.android.material.textfield.TextInputEditText
                    ........
                    android:hint="@string/label_hint"
                    />

</com.google.android.material.textfield.TextInputLayout>
于 2018-10-10T09:00:10.250 回答
7

我已经尝试了所有答案,但现在没有一个正在工作(特别是对于 com.google.android.material:material:1.1.0-beta01)。即使我们对 TextInputLayout 中的 EditText 添加逻辑进行了更改,我们在字段顶部仍有空白区域,该区域将一半的文本和提示消隐。现在我有一个解决这个问题的办法。主要是 EditText 中的填充,如material.io 中所述

<com.google.android.material.textfield.TextInputLayout
             . . .
    android:layout_height="wrap_content"
    app:hintEnabled="false"
    app:startIconDrawable="@drawable/ic_search_black"
    app:endIconMode="clear_text">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/et_search"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="12dp"
        android:hint="@string/showcase_search_hint_text"
        android:inputType="text" />

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

它允许我们使用搜索图标和文本删除按钮实现类似“SearchView”的视图,而没有任何带有自定义视图的丑陋“魔法”

于 2019-10-09T16:24:59.943 回答
3

如果您使用过 app:hintEnabled="false" 然后还在 EditText 中设置 android:paddingTop="8dp" 并且繁荣顶部提示空间消失了,这对我有用希望这对你也有用

于 2020-11-06T10:35:04.663 回答
1

如果有人遇到像我这样的问题:

错误标签填充

标签使文本填充显示错误,然后执行以下操作:

<com.google.android.material.textfield.TextInputEditText
                    android:layout_width="match_parent"
                    android:paddingTop="@dimen/default_padding"
                    android:paddingBottom="@dimen/default_padding"
                    android:layout_height="wrap_content"
                    android:hint="@string/search_hint" />

将填充顶部和填充底部添加到TextInputEditText将解决问题

于 2020-06-02T02:22:31.463 回答
1

@Gauthier 的回答是正确的,但如果您不想要浮动提示,而是希望在文本编辑之前获得提示,那么除了禁用 TextInputLayout 的提示之外,您还应该在 EditText 小部件中提供提示。

我想这回答了一些人在上述评论中提出的一些问题。

于 2020-07-29T08:17:02.943 回答
0
myEditText.setOnFocusChangeListener { _, hasFocus ->
            if (hasFocus) textContainer.hint = null
            else myEditText.hint = getString(R.string.your_string)
        }

它使您的提示在您的 textInputLayout 中完美消失,因为如果您想让它与 app:hintEnabled="false" 一起消失,那会使您的 textInputLayout 不酷:)

于 2020-05-12T06:22:48.207 回答
0
 <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/etemailLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint=" ">

            <EditText
                android:id="@+id/txtemail"
                style="@style/login_edittext"
                android:hint="Enter Your Email Address"
                android:inputType="textEmailAddress" />

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

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/etPasswordLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint=" "
            android:scrollbars="vertical"
            app:counterEnabled="true"
            app:passwordToggleEnabled="true">

            <EditText
                android:id="@+id/txtpassword"
                style="@style/login_edittext"
                android:fontFamily="@font/ubuntu"
                android:hint="Enter Password"
                android:inputType="textPassword"
                android:maxLength="8"
                android:scrollbars="vertical" />

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

将样式应用于您的 EditText 将下面的代码放在 Styles.xml 中。

<style name="login_edittext">
        <item name="android:layout_marginTop">15dp</item>
        <item name="android:background">@drawable/edittext_background</item>
        <item name="android:textColorHint">#FFFFFF</item>
        <item name="android:textColor">#FFFFFF</item>
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

背景效果在drawable中创建edittext_background.xml ..

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners android:radius="7dp" />
    <solid android:color="#80ffffff" />
    <padding android:left="10dp" android:right="10dp"
        android:top="10dp" android:bottom="10dp" />
    <stroke android:width="2dp" android:color="#FFFFFF" />
</shape>
于 2020-05-27T03:15:46.393 回答
-1

我认为这会帮助你:

textContainer.setHintAnimationEnabled(false);
于 2016-02-16T04:13:24.183 回答
-1

app:hintAnimationEnabled="false"将设计库更新到 v23 并添加TextInputLayout

于 2016-03-04T14:31:22.857 回答