Câu hỏi EditText được thêm vào không phải là TextInputEditText. Thay vào đó, hãy chuyển sang sử dụng lớp đó


Tôi đang sử dụng EditText bên trong TextInputLayout, nhưng sau khi nâng cấp thư viện hỗ trợ lên 23.2.0, tôi nhận được cảnh báo này trong logcat, sự khác biệt giữa một EditText và một TextInputEditText? Tôi không thể tìm thấy bất kỳ tài liệu nào cho nó.


76
2018-03-03 15:13


gốc


tôi đã nâng cấp thư viện hỗ trợ của mình lên 23.2.1 nhưng vẫn TextInputEditText không thể được giải quyết trong mã của tôi . Làm thế nào bạn giải quyết nó? - Edijae Crusar


Các câu trả lời:


Tôi đã tự hỏi điều này quá, Daniel Wilson thu thập tài liệu, nhưng với mắt chưa được đào tạo, nó không có ý nghĩa nhiều. Đây là tất cả những gì về: "chế độ trích xuất" đề cập đến loại chế độ xem được hiển thị khi không gian quá nhỏ, ví dụ như cảnh quan trên điện thoại. Tôi đang sử dụng Galaxy S4 với Bàn phím Google làm IME.

Giao diện người dùng ngang mà không hiển thị IME

Dựa trên tiêu điểm (trên Mô tả) bạn có thể thấy TextInputLayout trong hành động đẩy gợi ý bên ngoài trình chỉnh sửa. Không có gì đặc biệt ở đây, đây là những gì TextInputLayout có nghĩa vụ phải làm.

Landscape UI without visible IME

Chỉnh sửa giao diện người dùng rỗng Tên trường

Chỉnh sửa Tên bạn có thể thấy rằng IME không cung cấp cho bạn gợi ý về những gì bạn đang chỉnh sửa.

Landscape UI editing empty Name field

Chỉnh sửa giao diện người dùng trống trường Mô tả

Chỉnh sửa Mô tả, bạn có thể thấy IME cung cấp cho bạn gợi ý về những gì bạn đang chỉnh sửa.

Landscape UI editing empty Description field

XML bố cục

Sự khác biệt giữa hai trường là kiểu của chúng EditText VS TextInputEditText. Điều quan trọng ở đây là TextInputLayout có android:hint và không phải là EditText được bao bọc, đây là trường hợp TextInputEditTextmột vài dòng mã Java tạo nên sự khác biệt lớn.

Trường tên

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

Trường mô tả

<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



tôi đã nâng cấp thư viện hỗ trợ của mình lên 23.2.1 nhưng vẫn TextInputEditText không thể được giải quyết trong mã của tôi. Làm thế nào bạn giải quyết nó? - Edijae Crusar
Bạn có thư viện thiết kế không? Điều này không hỗ trợ. - TWiStErRob
Ghi chú nhanh: theo tài liệu, android:hint tài sản có nghĩa vụ phải đi vào TextInputEditText thay vì TextInputLayout. - DriesOeyen
@ luxsypher tôi đã kết thúc việc bỏ nó và sử dụng cách khác đặt EditText trong TextInputLayout - Edijae Crusar
@ jeet.chanchawat nó là một upcast, vì vậy nó an toàn. Bạn nên luôn sử dụng loại chung nhất cung cấp cho bạn chức năng (= API) cần thiết. Sử dụng TextInputEditTextlà một chi tiết triển khai của giao diện người dùng. - TWiStErRob


Không có tài liệu cho nó, nhưng lớp học thường xuyên EditText với một tính năng bổ sung:

Sử dụng lớp này cho phép chúng tôi hiển thị gợi ý trong IME khi ở chế độ 'trích xuất'.

Cụ thể là nó đặt EditorInfo.hintText. Bạn sẽ nhận thấy trong TextInputLayout bạn có thể chỉ định gợi ý và sự xuất hiện của nó chứ không phải là một phần của đứa trẻ EditText tiện ích.

Nếu bạn cần làm điều đó, bạn nên sử dụng TextInputEditText do đó, nó chú ý đến thông tin gợi ý bạn đã chỉ định trong TextInputLayout.


26
2018-03-04 18:19



bất kỳ ví dụ nào? Tôi không biết bạn đang đề xuất gì - behelit


Về cơ bản chúng giống nhau, nhưng tôi nghĩ TextInputEditText có nhiều tính năng hơn và có thể là thuộc tính. Tôi đã thay đổi thành TextInputEditText và mọi thứ đã hoạt động và trông như trước đây với tiêu chuẩn EditText.


4
2018-03-03 15:15



Tôi đã sử dụng TextInputLayout, tôi hỏi về một thay thế cho EditText được gọi là TextInputEditText - Silvia H
Xin lỗi, tôi đã nói về TextInputEditText nhưng nói bố cục. Tôi đã chỉnh sửa câu trả lời - Nick Mowen


Câu hỏi này là cũ, tuy nhiên tôi đã có vấn đề này và chỉ cần xóa dòng này trong tập tin xml của tôi: android: fitsSystemWindows = "true", và lỗi biến mất.


-1
2017-07-05 23:45