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


96

EditTextsでフローティングラベルを表示するために、最近リリースされたAndroid Design Support Libraryを使用しています。しかし、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>

また、TextInputLayoutusingメソッドのヒントを設定しようとしました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());

私は同じ問題を抱えています。驚いたことに、4.1エミュレーターでアプリケーションを実行すると問題なく動作しましたが、Mプレビューを有効にすると、Nexus TextInputLayoutが誤動作し、埋め込まれたEditTextのヒントが表示されませんでした。
sashomasho

ヒントの色を確認したり、ビューの背景色を変更したりできますか。ヒントはありますが、色が原因で表示されません
Ultimo_m

@Ultimo_mヒントの色は問題にならないと思います。ただし、背景色を変えてみます。
Shajeel Afzal 2015

1
@Shajeel Afzal私はあなたと同じ問題を抱えていたので、この提案をあなたに伝えています。ビューに背景を追加すると、ヒントが表示されました。フラグメント内で使用しています。私はJavaからコードを追加せず、xmlから追加しただけです
Ultimo_m

2
フラグメントを追加/削除すると、この問題が発生します。しかし、フラグメントを表示/非表示にしても、この問題は発生しません。
Dave Jensen

回答:


84

更新:

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

元の回答:

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

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

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


1
まあAndroid MDCはプレビュー版です。
Dave Jensen

1
ところで、バグのステータスは「将来のリリース」になっているようです。
Dave Jensen

2
コメント#28ここに:code.google.com/p/android/issues/…私のために働く
J_Sizzle

1
バージョン22.2.1で修正されました。
Jdruwe

3
これはV22.2.1で修正されていますか?Androidバージョン5.1.1で実行されているデザインライブラリv22.2.1でこの問題が発生しています。ツールバーに2つのEditTextがあり、これをTransitioningしており、フォーカスされるまでヒントテキストが表示されません。
StuStirling 2015

13

これは、Androidデザインライブラリの既知のバグです。それは受け入れられ割り当てられました

したがって、次のAndroid Design Libraryリリースでこれを修正する必要があります。

その間、あなたはそこに投稿されるかもしれないハックフィックスの問題トラッカーを見ることができますが、今のところ私は知りません。

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


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

11

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

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

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

textColorHintプロパティで修正されました。
JoM 2016


5

あなたは以下のように使用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>

3
   <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 Studioを最新バージョンに更新します。 ここの出力を参照してください


3

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

この問題はv23.0.1、サポートデザインライブラリで解決されています。私はまた私の更新appcompat-v7には23.0.1compileSdkVersion23buildToolsVersion23.0.1してbuild.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'
}

サポートデザインのバージョンを変更するときに、compleSdkVersion、buildtoolsのバージョン、appCompatVersionを変更する必要がありますか?
srinivas

これは、「サポートライブラリ」v23がプロジェクトをコンパイルするためにAPI23を必要とするために発生します。したがって、主な関係は「サポートライブラリ」と「compileSdkVersion」の間です。「targetSdkVersion」または「minSdkVersion」の方が低い場合でも、常に「compileSdkVersion」と一致させる必要があります。その理由は単純です。ライブラリのバージョンは、ビルドされたAndroid SDKのバージョンを反映しています。
Wahib Ul Haq

2

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

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にを表示する場合は、またはの最後に上記のコードを実行する必要があります。上記のコードがUIで実行されることを確認してください。viewanimationstranistionsanimationtransitionthread


0

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



0

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


0

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


0

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

<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

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

のスタイルを設定するときfragment

f1.setStyle(DialogFragment.STYLE_NO_FRAME,android.R.style.Theme_DeviceDefault_Light);

以外のスタイルを試したところ、バグはなくなりました"Theme_DeviceDefault_Dialog"

試してみる。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.