web-dev-qa-db-ja.com

ユーザーがフォーカスする前にTextInputLayoutにEditTextヒントが表示されない

最近リリースされた Android Design Support Library を使用して、EditTextsでフローティングラベルを表示しています。しかし、UIがレンダリングされたときにEditTextのヒントが表示されないという問題に直面していますが、EditTextに焦点を合わせた後にヒントが表示されます。

私のレイアウトは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <FrameLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">
    <ScrollView
        Android:id="@+id/ScrollView01"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:scrollbars="vertical">

        <LinearLayout
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:orientation="vertical"
            Android:paddingLeft="@dimen/activity_horizontal_margin"
            Android:paddingRight="@dimen/activity_horizontal_margin">

            <Android.support.design.widget.TextInputLayout
                Android:id="@+id/name_et_textinputlayout"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="@dimen/activity_vertical_margin">

                <EditText
                    Android:id="@+id/FeedBackerNameET"
                    Android:layout_width="fill_parent"
                    Android:layout_height="wrap_content"
                    Android:hint="@string/feedbackname"
                    Android:inputType="textPersonName|textCapWords" />
            </Android.support.design.widget.TextInputLayout>

            <Android.support.design.widget.TextInputLayout
                Android:id="@+id/email_textinputlayout"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <EditText
                    Android:id="@+id/FeedBackerEmailET"
                    Android:layout_width="fill_parent"
                    Android:layout_height="wrap_content"
                    Android:hint="@string/feedbackemail"
                    Android:inputType="textEmailAddress" />

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

            <Spinner
                Android:id="@+id/SpinnerFeedbackType"
                Android:layout_width="fill_parent"
                Android:layout_height="48dp"
                Android:layout_marginTop="@dimen/activity_vertical_margin"
                Android:entries="@array/feedbacktypelist"
                Android:Prompt="@string/feedbacktype" />

            <Android.support.design.widget.TextInputLayout
                Android:id="@+id/body_textinputlayout"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <EditText
                    Android:id="@+id/EditTextFeedbackBody"
                    Android:layout_width="fill_parent"
                    Android:layout_height="wrap_content"
                    Android:hint="@string/feedbackbody"
                    Android:inputType="textMultiLine|textCapSentences"
                    Android:lines="5" />

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

            <CheckBox
                Android:id="@+id/CheckBoxFeedBackResponse"
                Android:layout_width="fill_parent"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="@dimen/activity_vertical_margin"
                Android:text="@string/feedbackresponse" />

            <Button
                Android:id="@+id/ButtonSendFeedback"
                Android:layout_width="fill_parent"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="@dimen/activity_vertical_margin"
                Android:text="@string/feedbackbutton" />
        </LinearLayout>
    </ScrollView>

</FrameLayout>

<View
    Android:layout_width="match_parent"
    Android:layout_height="5dp"
    Android:background="@drawable/toolbar_shadow" />
</FrameLayout>

メソッドTextInputLayoutを使用してsetHintのヒントを設定しようとしましたが、運はありません。

mNameTextInputLayout = (TextInputLayout) v.findViewById(R.id.name_et_textinputlayout);
mNameTextInputLayout.setErrorEnabled(true);
mNameTextInputLayout.setHint(feedBackerNameET.getHint());

mEmailTextInputLayout = (TextInputLayout) v.findViewById(R.id.email_textinputlayout);
mEmailTextInputLayout.setErrorEnabled(true);
mEmailTextInputLayout.setHint(feedBackerEmail.getHint());

mBodyTextInputLayout = (TextInputLayout) v.findViewById(R.id.body_textinputlayout);
mBodyTextInputLayout.setErrorEnabled(true);
mBodyTextInputLayout.setHint(feedBackBody.getHint());
93
Shajeel Afzal

更新:

これは、バージョン22.2.1のライブラリで修正されたバグです。

元の答え:

@shkschneiderが述べたように、これは 既知のバグ です。 Githubユーザー@ ljubisa987は最近、回避策の要点を投稿しました。

https://Gist.github.com/ljubisa987/e33cd5597da07172c55d

コメントに記載されているように、回避策はAndroid Lollipop以前でのみ機能します。 Android Mプレビューでは機能しません。

84
Dave Jensen

これは、Android Designライブラリの 既知のバグ です。 acceptedおよびassignedです。

そのため、次のAndroidデザインライブラリリリースでこれを修正する必要があります。

それまでの間、そこに投稿される可能性のあるハッキーな修正の問題トラッカーを見ることができましたが、現時点ではわかりません。

はい、ロリポップ以上にのみ影響します。

13
shkschneider

これは、デザインライブラリ23.1.1で機能します。

TextInputLayoutのxml属性でヒントの色を設定します。

    <Android.support.design.widget.TextInputLayout
        ....
        Android:layout_margin="15dp"
        Android:textColorHint="@color/hintColor"
        Android:layout_width="match_parent"
        ...
10
Embydextrous

この問題はバージョン22.2.1で修正されています

6
Jdruwe

Android.support.v7.widget.AppCompatEditTextEditTextとして使用し、以下のようにAndroid:hintを設定する必要があります

<Android.support.design.widget.TextInputLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">
        <Android.support.v7.widget.AppCompatEditText
                Android:id="@+id/etx_first_name"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"                    
                Android:inputType="text"
                Android:hint="@string/hint_first_name"/>
    </Android.support.design.widget.TextInputLayout>
5
Ahmad
   <Android.support.design.widget.TextInputLayout
            Android:id="@+id/editText1"
            Android:layout_margin="15dp"
            Android:layout_centerVertical="true"
            Android:layout_width="match_parent"

            Android:layout_height="wrap_content">

              <AutoCompleteTextView
                Android:id="@+id/editText"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:singleLine="true"
                Android:hint="Add City" />

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

このコードを使用してください。アクティビティがAppCompatActivityであることを確認してください。また、依存関係は最新バージョンにもあります

compile 'com.Android.support:appcompat-v7:22.2.0'
compile 'com.Android.support:design:22.2.0'

Androidスタジオを最新バージョンに更新します。 ここの出力を参照

3
Ajinkya

この問題は、サポートデザインライブラリのv23.0.1で解決されています。また、appcompat-v723.0.1に、compileSdkVersion23に、_ buildToolsVersion23.0.1build.gradleに更新しました。

Android {    
compileSdkVersion 23
buildToolsVersion "23.0.1"
}

dependencies {
compile 'com.Android.support:appcompat-v7:23.0.1'
compile 'com.Android.support:design:23.0.1'
}
3
Wahib Ul Haq

EditTextヒントをプログラムで設定している場合、機能しません。 TextInputLayout自体にヒントを設定する必要があります。

TextInputLayout textInputLayout = (TextInputLayout) findViewById(R.id.usernameTextInputLayout);
textInputLayout.setHint(getString(R.string.username_hint));

あなたが疑問に思っている場合のXMLは次のとおりです。

        <Android.support.design.widget.TextInputLayout
            Android:id="@+id/usernameTextInputLayout"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">

            <Android.support.v7.widget.AppCompatEditText
                Android:id="@+id/usernameEt"
                Android:layout_width="match_parent"
                Android:layout_height="@dimen/default_height"
                Android:layout_marginEnd="@dimen/default_margin"
                Android:layout_marginStart="@dimen/default_margin"
                Android:maxLength="@integer/username"
                tools:hint="Username" />

        </Android.support.design.widget.TextInputLayout>
3

私はこのコードで問題を解決しました:

new Handler().postDelayed(
        new Runnable() {
            @Override
            public void run() {
                TextInputLayout til = (TextInputLayout) someParentView.findViewById(R.id.til);
                til.setHint("Your Hint Text");
                til.bringToFront();
            }
        }, 10);

ここで重要なのはbringToFrontです。 TextInputLayoutに強制的に図面をやり直させますが、これはinvalidate()を実行することとは異なります。 TextInputLayoutまたはviewを持つanimationstranistionsを表示しようとする場合は、animationの最後に上記のコードを実行する必要があります。またはtransition。上記のコードがUI threadで実行されることを確認してください。

2
AndroidDev

何か違うものを見つけました。

フラグメントのスタイルを設定するとき、

f1.setStyle(DialogFragment.STYLE_NO_FRAME、Android.R.style.Theme_DeviceDefault_Light);

「Theme_DeviceDefault_Dialog」とは異なるスタイルを試してみたところ、バグはなくなりました。

試してみる。

0
Jorge Cardenas

TextInputLayoutAndroid:hint="your_hint"を追加するだけです。

0
Pratik Karale

これは私のために働いたので、これには簡単な解決策があります

<Android.support.design.widget.TextInputLayout
    Android:id="@+id/activity_login_til_password"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginBottom="27dp"
    Android:layout_marginTop="24dp"
    Android:padding="10dp"
    app:passwordToggleEnabled="true"
    app:passwordToggleTint="#000000"
    app:passwordToggleDrawable="@drawable/passwordviewtoggleselector"
    Android:theme="@style/Base.TextAppearance.AppCompat">
      <!---- add this line and theme as you need ----->
    <Android.support.design.widget.TextInputEditText
        Android:id="@+id/activity_login_et_password"
        Android:layout_width="match_parent"
        Android:layout_height="58dp"
        Android:hint="Password"
        Android:inputType="textPassword"
        Android:padding="10dp"
        Android:textColor="#f5ab3a"
        Android:textColorHint="#e6d2d1cf"
        Android:textSize="20dp" />

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

Android:theme = "@ style/Base.TextAppearance.AppCompat"をTextEditLayoutに追加するだけで機能し、必要に応じてテーマを変更できます。

0

問題はヒントの色です。何かを入力すると白くなります。ヒントの色を変更するか、背景色を変更してください。入力中にヒントが表示されます。

EditTextの背景と対照的なヒント色を設定します。

<item name="Android:textColorHint">#FF424242</item>

関連する:
EditTextのsetHintTextColor()
TextInputLayoutの使用時にEditTextヒントの色を変更
TextInputLayoutのフローティングラベルの色を変更する方法

0
Ivan Chau

解決した問題:urアプリのbuild.gradleに移動し、デザインライブラリを確認します。 'com.Android.support:design:22.2.1'をコンパイルします。22.2.1以降である必要があります。

0
Abhishek

EditTextにonFousListenerを設定すると、この問題が発生するようです-EditTextを拡張し、複数のonFocusListenersをサポートしてください

0
nartus