TextInputLayout zeigt keinen EditText-Hinweis an, bevor sich der Benutzer darauf konzentriert


96

Ich verwende die kürzlich veröffentlichte Android Design Support Library , um Floating Label mit EditTexts anzuzeigen. Aber ich stehe vor dem Problem, dass der Hinweis auf dem EditText nicht angezeigt wird, wenn die Benutzeroberfläche gerendert wird, aber ich sehe den Hinweis, nachdem ich mich auf die EditTexts konzentriert habe.

Mein Layout ist wie folgt:

<?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>

Ich habe auch versucht, einen Hinweis für die TextInputLayoutusing-Methode zu setzen, setHintaber kein Glück.

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());

Ich habe das gleiche Problem. Zu meiner Überraschung funktionierte das Ausführen der Anwendung auf dem 4.1-Emulator einwandfrei, aber auf meiner M-Vorschau war Nexus TextInputLayout fehlerhaft und zeigte den Hinweis für den eingebetteten EditText nicht an.
Sashomasho

Können Sie Ihre Hinweisfarbe überprüfen oder versuchen, die Hintergrundfarbe Ihrer Ansicht zu ändern
?

@Ultimo_m Ich denke, Hinweis Farbe muss kein Problem sein. Ich werde jedoch versuchen, nach dem Ändern der Hintergrundfarbe einen Blick darauf zu werfen.
Shajeel Afzal

1
@Shajeel Afzal Ich erzähle Ihnen diesen Vorschlag, weil ich das gleiche Problem hatte wie Sie, und als ich der Ansicht Hintergrundinformationen hinzufügte, sah ich den Hinweis. Ich benutze es in einem Fragment. Ich habe keinen Code von Java hinzugefügt, alles was ich getan habe ist von xml
Ultimo_m

2
Ich sehe dieses Problem, wenn ich Fragmente hinzufüge / entferne. Aber wenn ich Fragmente ein- / ausblende, sehe ich dieses Problem nicht.
Dave Jensen

Antworten:


84

Aktualisieren:

Dies ist ein Fehler, der in Version 22.2.1 der Bibliothek behoben wurde.

Ursprüngliche Antwort:

Wie von @shkschneider erwähnt, ist dies ein bekannter Fehler . Der Github-Benutzer @ ljubisa987 hat kürzlich eine Übersicht für eine Problemumgehung veröffentlicht:

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

Wie in den Kommentaren erwähnt, funktioniert die Problemumgehung nur unter Android Lollipop und älter. In der Android M-Vorschau funktioniert dies nicht.


1
Nun, Android MDC ist eine Vorschau-Version.
Dave Jensen

1
Übrigens sieht es so aus, als ob der Fehlerstatus jetzt "Future Release" ist.
Dave Jensen

2
Kommentar # 28 hier: code.google.com/p/android/issues/… funktioniert für mich
J_Sizzle

1
In Version 22.2.1 behoben.
Jdruwe

3
Sind wir sicher, dass dies in V22.2.1 behoben ist? Ich habe dieses Problem in der Designbibliothek v2.2.2.1, die unter Android Version 5.1.1 ausgeführt wird. Ich habe zwei EditText in einer Symbolleiste, zu der ich gerade aktiviere, und der Hinweistext wird erst angezeigt, wenn er fokussiert ist.
StuStirling

13

Das ist ein bekannter Fehler in der Android Design-Bibliothek. Es wurde akzeptiert und zugewiesen .

Daher sollten Sie dies in der nächsten Version der Android Design-Bibliothek beheben lassen.

In der Zwischenzeit könnten Sie im Issue-Tracker nach einem Hacky-Fix ​​suchen, der möglicherweise dort veröffentlicht wird, aber ich kenne noch keinen.

Und ja, es betrifft nur Lollipop und höher.


1
Dieses Problem wurde in Version 22.2.1
Sam

11

Dies funktioniert für mich in der Design Library 23.1.1:

Legen Sie die Hinweisfarbe in den XML-Attributen von TextInputLayout fest:

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

Die Eigenschaft textColorHint hat dies auch für mich behoben.
JoM


5

Sie sollten android.support.v7.widget.AppCompatEditTextas verwenden EditTextund android:hintwie unten einstellen

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

Verwenden Sie dieses Code-Snippet. Stellen Sie sicher, dass Ihre Aktivität AppCompatActivity ist. Und Abhängigkeiten gibt es auch bei den neuesten Versionen

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

Aktualisieren Sie das Android Studio auf die neueste Version. siehe Ausgabe hier


3

Wenn Sie Ihren EditText-Hinweis programmgesteuert festlegen, funktioniert er nicht! Sie müssen den Hinweis auf das TextInputLayout selbst festlegen.

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

Hier ist das XML für den Fall, dass Sie sich fragen:

        <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

Dieses Problem wurde in v23.0.1der Support-Designbibliothek behoben . Ich habe auch mein appcompat-v7to 23.0.1, compileSdkVersionto 23& buildToolsVersionto 23.0.1in build.gradle aktualisiert .

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'
}

Ist es notwendig, compleSdkVersion, buildtools version und appCompatVersion zu ändern, wenn Sie die Support-Designversion ändern?
Srinivas

Dies liegt daran, dass für die 'Support-Bibliotheken' v23 die API23 zum Kompilieren des Projekts erforderlich ist. Die Hauptbeziehung besteht also zwischen 'Support Libraries' und 'compileSdkVersion'. Sie sollten immer mit der 'compileSdkVersion' übereinstimmen, auch wenn die 'targetSdkVersion' oder 'minSdkVersion' niedriger sind. Der Grund ist einfach: Die Version der Bibliothek spiegelt die Version des Android SDK wider, gegen die sie erstellt wurde.
Wahib Ul Haq

2

Ich habe mein Problem mit diesem Code gelöst:

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);

Der Schlüssel hier ist der bringToFront. Es zwingt den TextInputLayout, seine Zeichnung zu wiederholen, was nicht dasselbe ist wie zu tun invalidate(). Wenn Sie versuchen, das TextInputLayoutauf einem anzuzeigen view, das animationsoder hat tranistions, müssen Sie den obigen Code am Ende des animationoder ausführen transition. Stellen Sie einfach sicher, dass der obige Code auf der Benutzeroberfläche ausgeführt wird thread.


0

Dieses Problem tritt anscheinend auf, wenn Sie onFousListener für EditText festlegen. Versuchen Sie, EditText zu erweitern und mehrere onFocusListener zu unterstützen



0

Problem gelöst: Gehen Sie zu build.gradle Ihrer App und überprüfen Sie die Designbibliothek. kompiliere 'com.android.support:design:22.2.1' Es sollte 22.2.1 oder neuer sein.


0

Problem ist die Hinweisfarbe. Es wird weiß, wenn Sie etwas tippen. Bitte ändern Sie die Hinweisfarbe oder die Hintergrundfarbe. Sie sehen den Hinweis während der Eingabe.


0

Es gibt eine einfache Lösung dafür, da dies für mich funktioniert hat

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

Fügen Sie einfach android: theme = "@ style / Base.TextAppearance.AppCompat" zum TextEditLayout hinzu und es sollte funktionieren und Sie können das Thema nach Bedarf ändern.



0

Ich habe etwas anderes gefunden.

Bei der Einstellung des Stils für fragment,

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

Der Fehler war verschwunden, als ich andere Stile als ausprobiert habe "Theme_DeviceDefault_Dialog".

Versuche es.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.