Frage EditText added ist kein TextInputEditText. Bitte wechseln Sie stattdessen zur Verwendung dieser Klasse


Ich benutze ein EditText in einem TextInputLayout, aber nach dem Upgrade der Support-Bibliothek auf 23.2.0, bekomme ich diese Warnung im Logcat, Was ist der Unterschied zwischen einem regulären EditText und ein TextInputEditText? Ich kann keine Dokumentation dafür finden.


76
2018-03-03 15:13


Ursprung


Antworten:


Ich habe mich auch gefragt, Daniel Wilson sammelte die Dokumentation, aber für das ungeschulte Auge bedeutet es nicht viel. Hier ist, worum es geht: "extrahieren Modus" bezieht sich auf den Ansichtstyp, der angezeigt wird, wenn der Speicherplatz zu klein ist, z. B. die Landschaft auf einem Telefon. Ich verwende Galaxy S4 mit Google Keyboard als IME.

Landscape UI ohne sichtbaren IME

Basierend auf dem Fokus (auf Beschreibung) können Sie sehen TextInputLayout in Aktion den Hinweis außerhalb des Editors drücken. Nichts besonderes hier, das ist was TextInputLayout soll tun.

Landscape UI without visible IME

Landscape UI bearbeitet leeres Namensfeld

Wenn Sie den Namen bearbeiten, sehen Sie, dass der IME Ihnen keinen Hinweis darauf gibt, was Sie bearbeiten.

Landscape UI editing empty Name field

Landscape UI Bearbeiten leer Beschreibung Feld

Wenn Sie die Beschreibung bearbeiten, sehen Sie, dass der IME Ihnen einen Hinweis darauf gibt, was Sie bearbeiten.

Landscape UI editing empty Description field

Layout-XMLs

Der Unterschied zwischen den beiden Feldern ist ihr Typ EditText VS TextInputEditText. Das Wichtigste ist, dass TextInputLayout hat die android:hint und nicht der umwickelte EditText, das ist der Fall wenn TextInputEditTextDie wenigen Zeilen Java-Code machen einen großen Unterschied.

Namensfeld

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Item Name"
    >
    <EditText
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</android.support.design.widget.TextInputLayout>

Beschreibungsfeld

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Item Description"
    >
    <android.support.design.widget.TextInputEditText
        android:id="@+id/description"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:minLines="4"
        android:scrollbars="vertical"
        />
</android.support.design.widget.TextInputLayout>

92
2018-03-28 18:53



Es gibt keine Dokumentation dafür, aber die Klasse ist regelmäßig EditText mit einem einzigen zusätzlichen Feature:

Wenn diese Klasse verwendet wird, können wir im Modus "Extrahieren" einen Hinweis im IME anzeigen.

Speziell setzt es die EditorInfo.hintText. Du wirst es merken TextInputLayout Klasse können Sie den Hinweis und seine Erscheinung angeben und nicht als Teil des Kindes EditText Widget.

Wenn Sie das tun müssen, sollten Sie einen verwenden TextInputEditText Es achtet also auf die Hinweisinfo, die Sie in der TextInputLayout.


26
2018-03-04 18:19



Sie sind im Wesentlichen das Gleiche, aber ich denke das TextInputEditText hat mehr Funktionen und möglicherweise Attribute. Ich wechselte zum TextInputEditText und alles funktionierte und sah so aus wie zuvor mit dem Standard EditText.


4
2018-03-03 15:15



Diese Frage ist alt, aber ich hatte dieses Problem und lösche einfach diese Zeile in meiner XML-Datei: android: fitsSystemWindows = "true", und der Fehler verschwand.


-1
2017-07-05 23:45