web-dev-qa-db-ja.com

TextInputLayout XMLのフローティングラベルヒントテキストの無効化/削除

これは直感に反するように思えるかもしれませんが、TextInputLayoutのフローティングラベルヒントを無効にするか削除する方法はありますか?単にTextInputLayoutの代わりに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>
43
Micro

呼び出すことができるサポートライブラリのバージョン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=18159

109
Gauthier

これを達成するには、次の3つの方法があります。

1TextInputLayoutの_Android:hint_をスペース___文字に設定し、EditTextで_Android:hint="This is my cool hint"_を設定したままにします。

_<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 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.");
_
31
Vikram

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>
5
Campino