Der hinzugefügte EditText ist kein TextInputEditText. Bitte wechseln Sie stattdessen zu dieser Klasse

92

Ich verwende ein EditTextInside-A TextInputLayout, aber nach dem Upgrade der Support-Bibliothek auf 23.2.0 wird im Logcat die folgende Warnung angezeigt: Was ist der Unterschied zwischen einem regulären EditTextund einem TextInputEditText? Ich kann anscheinend keine Dokumentation dafür finden.

Silvia H.
quelle
Ich habe meine Support-Bibliothek auf 23.2.1 aktualisiert, aber TextInputEditText kann in meinem Code immer noch nicht aufgelöst werden . Wie haben Sie es gelöst?
Edijae Crusar

Antworten:

109

Ich habe mich auch gefragt, Daniel Wilson hat die Dokumentation gesammelt, aber für das ungeübte Auge bedeutet das nicht viel. Hier ist, worum es geht: "Extraktionsmodus" bezieht sich auf die Art der Ansicht, die angezeigt wird, wenn der Speicherplatz zu klein ist, z. B. Querformat auf einem Telefon. Ich verwende Galaxy S4 mit Google Keyboard als Eingabemethoden-Editor (IME).

Querformat-Benutzeroberfläche ohne sichtbaren IME

Anhand des Fokus (auf Beschreibung) können Sie TextInputLayoutin Aktion sehen, wie der Hinweis außerhalb des Editors verschoben wird. Hier ist nichts Besonderes, das TextInputLayoutsoll man tun.

Querformat-Benutzeroberfläche ohne sichtbaren IME

Bearbeiten der Landschafts-Benutzeroberfläche leeres Namensfeld

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

Bearbeiten der Landschafts-Benutzeroberfläche leeres Namensfeld

Bearbeitung der Querformat-Benutzeroberfläche leeres Beschreibungsfeld

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

Bearbeitung der Querformat-Benutzeroberfläche leeres Beschreibungsfeld

Layout-XMLs

Der Unterschied zwischen den beiden Feldern ist ihre Art EditTextVS TextInputEditText. Das Wichtigste dabei ist, dass TextInputLayoutder android:hintund nicht der umbrochene EditText vorhanden ist. Dies ist der Fall, wenn TextInputEditTextdie wenigen Zeilen Java-Code einen großen Unterschied machen.

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>
TWiStErRob
quelle
3
Ich habe meine Support-Bibliothek auf 23.2.1 aktualisiert, aber TextInputEditText kann in meinem Code immer noch nicht aufgelöst werden. Wie haben Sie es gelöst?
Edijae Crusar
Haben Sie auch die Designbibliothek? Dies wird nicht unterstützt.
TWiStErRob
1
Kurzer Hinweis: Laut den Dokumenten soll die android:hintEigenschaft TextInputEditTextstatt gehen TextInputLayout.
DriesOeyen
1
@luxsypher Am Ende ließ ich es fallen und benutzte den anderen Weg, der EditText in ein TextInputLayout
Edijae Crusar
1
@ jeet.chanchawat es ist ein Upcast, also ist es sicher. Sie sollten immer den allgemeinsten Typ verwenden, der Ihnen die erforderliche Funktionalität (= API) bietet. Die Verwendung TextInputEditTextist ein Implementierungsdetail der Benutzeroberfläche.
TWiStErRob
34

Es gibt keine Dokumentation dafür, aber die Klasse ist eine reguläre Klasse EditTextmit einer einzigen zusätzlichen Funktion:

Mit dieser Klasse können wir im Extraktionsmodus einen Hinweis im IME anzeigen.

Insbesondere setzt es die EditorInfo.hintText. Sie werden feststellen, dass Sie in der TextInputLayoutKlasse den Hinweis und sein Erscheinungsbild angeben können und nicht als Teil des untergeordneten EditTextWidgets.

Wenn Sie dies tun müssen, sollten Sie ein verwenden TextInputEditText, damit die Hinweisinformationen berücksichtigt werden, die Sie im Feld angegeben haben TextInputLayout.

Daniel Wilson
quelle
2
irgendein Beispiel? Ich habe keine Ahnung, was Sie vorschlagen
siehe
4

Sie sind im Wesentlichen dasselbe, aber ich denke, das TextInputEditTexthat mehr Funktionen und möglicherweise Attribute. Ich wechselte zu TextInputEditTextund alles funktionierte und sah aus wie vorher mit dem Standard EditText.

Nick Mowen
quelle
Ich benutze bereits TextInputLayout und frage nach einer Alternative zum EditText namens TextInputEditText
Silvia H
Entschuldigung, ich habe über TextInputEditText gesprochen, aber das Layout gesagt. Ich habe die Antwort bearbeitet
Nick Mowen
0

Der einzige Unterschied besteht darin, dass Ihr Gerät im Querformat TextInputEditTextden Hinweis anzeigt und EditTextnicht.

Sam Chen
quelle
-3

Ich hatte dieses Problem und habe gerade diese Zeile in meiner XML-Datei gelöscht:

android: fitsSystemWindows = "true"

und der Fehler verschwand.

Santos Rodriguez
quelle