EditText yang ditambahkan bukanlah TextInputEditText. Silakan beralih untuk menggunakan kelas itu sebagai gantinya

94

Saya menggunakan EditTextinside a TextInputLayout, tapi setelah mengupgrade support library ke 23.2.0, saya mendapatkan peringatan ini di logcat, Apa perbedaan antara regular EditTextdan a TextInputEditText? Sepertinya saya tidak dapat menemukan dokumentasi untuk itu.

Silvia H.
sumber
saya telah meningkatkan pustaka dukungan saya ke 23.2.1 tetapi masih TextInputEditText tidak dapat diselesaikan dalam kode saya . bagaimana Anda mengatasinya?
Edijae Crusar

Jawaban:

110

Saya juga bertanya-tanya tentang ini, Daniel Wilson mengumpulkan dokumentasi, tetapi bagi mata yang tidak terlatih itu tidak berarti banyak. Ini semua tentang: "mode ekstrak" mengacu pada jenis tampilan yang ditampilkan saat ruang terlalu kecil, misalnya lanskap di ponsel. Saya menggunakan Galaxy S4 dengan Google Keyboard sebagai editor metode masukan (IME).

UI lanskap tanpa IME yang terlihat

Berdasarkan fokus (pada Deskripsi), Anda dapat melihat TextInputLayoutaksi mendorong petunjuk di luar editor. Tidak ada yang istimewa di sini, inilah yang TextInputLayoutseharusnya dilakukan.

UI lanskap tanpa IME yang terlihat

Pengeditan UI lanskap bidang Nama kosong

Mengedit Nama Anda dapat melihat bahwa IME tidak memberi Anda petunjuk tentang apa yang Anda edit.

Pengeditan UI lanskap bidang Nama kosong

Pengeditan UI lanskap bidang Deskripsi kosong

Mengedit Deskripsi Anda dapat melihat bahwa IME memberi Anda petunjuk tentang apa yang Anda edit.

Pengeditan UI lanskap bidang Deskripsi kosong

XML tata letak

Perbedaan antara kedua bidang tersebut adalah tipe EditTextVS-nya TextInputEditText. Hal penting di sini adalah yang TextInputLayoutmemiliki android:hintdan bukan EditText yang dibungkus, ini adalah kasus ketika TextInputEditTextbeberapa baris kode Java membuat perbedaan besar.

Bidang nama

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

Bidang deskripsi

<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
sumber
3
saya telah meningkatkan pustaka dukungan saya ke 23.2.1 tetapi masih TextInputEditText tidak dapat diselesaikan dalam kode saya. bagaimana Anda mengatasinya?
Edijae Crusar
Apakah Anda juga memiliki perpustakaan desain? Ini tidak mendukung.
TWiStErRob
1
Catatan cepat: menurut dokumen, android:hintproperti seharusnya masuk, TextInputEditTextbukan TextInputLayout.
DriesOeyen
1
@luxsypher saya akhirnya menjatuhkannya dan menggunakan cara lain yang meletakkan EditText di TextInputLayout
Edijae Crusar
1
@ jeet.chanchawat itu suram, jadi aman. Anda harus selalu menggunakan tipe paling umum yang memberi Anda fungsionalitas (= API) yang diperlukan. Menggunakan TextInputEditTextadalah detail implementasi UI.
TWiStErRob
35

Tidak ada dokumentasi untuk itu, tetapi kelasnya adalah reguler EditTextdengan satu fitur tambahan:

Menggunakan kelas ini memungkinkan kita untuk menampilkan petunjuk di IME saat dalam mode 'ekstrak'.

Secara khusus itu mengatur EditorInfo.hintText. Anda akan melihat di TextInputLayoutkelas Anda dapat menentukan petunjuk dan tampilannya daripada sebagai bagian dari EditTextwidget anak .

Jika Anda perlu melakukan itu, Anda harus menggunakan a TextInputEditTextsehingga memperhatikan info petunjuk yang Anda tentukan di TextInputLayout.

Daniel Wilson
sumber
2
ada contoh? Saya tidak tahu apa yang Anda sarankan
lihat
4

Mereka pada dasarnya adalah hal yang sama, tetapi saya pikir TextInputEditTextmemiliki lebih banyak fitur dan kemungkinan atribut. Saya berubah ke TextInputEditTextdan semuanya bekerja dan terlihat seperti sebelumnya dengan standar EditText.

Nick Mowen
sumber
Saya sudah menggunakan TextInputLayout, saya menanyakan tentang alternatif dari EditText yang disebut TextInputEditText
Silvia H
Maaf, saya berbicara tentang TextInputEditText tetapi mengatakan tata letak. Saya mengedit jawabannya
Nick Mowen
0

Satu-satunya perbedaan adalah ketika perangkat Anda dalam mode lanskap, TextInputEditTextakan menunjukkan petunjuk, EditTexttidak akan.

Sam Chen
sumber
-3

Saya mengalami masalah ini dan baru saja menghapus baris ini di file xml saya:

android: fitsSystemWindows = "true"

dan kesalahan itu hilang.

Santos Rodriguez
sumber