2016-09-10 16 views
13

Tôi đang sử dụng TextInputLayout trong ứng dụng Android của mình để đạt được hiệu ứng nhãn nổi gọn gàng đó cho các trường nhập của tôi. Tôi biết rằng tôi cũng nên sử dụng TextInputEditText để cho phép các gợi ý được hiển thị khi ở chế độ ngang và đầu vào sẽ lấp đầy toàn bộ màn hình.TextInputLayout và AutoCompleteTextView

Tuy nhiên, trong một số trường nhập của tôi, tôi có tự động hoàn thành bằng cách sử dụng AutoCompleteTextView (IMO có tên không phù hợp với nó - "TextView" thay vì "EditText") từ EditText. Do đó, nó không có chức năng giống như TextInputEditText mang lại. Vì vậy, tôi tự hỏi nếu có một cách để đạt được cùng một chức năng gợi ý (mà không cần thực hiện riêng của tôi TextInputAutoCompleteTextView thực hiện, đó là) và cũng để tránh các cảnh báo lint được sản xuất. Am i thiếu cái gì ở đây? Tôi cho rằng tôi nhận được rằng họ đã không tạo ra các phiên bản tùy chỉnh của tất cả các lớp con trực tiếp và gián tiếp của EditText cho điều cụ thể này, vì vậy tôi có thể tự làm cho riêng mình không?

Trả lời

12

Một chút trễ, nhưng có, bạn sẽ phải triển khai thực hiện của riêng bạn. Tin tốt là điều này khá đơn giản. Đây là cách TextInputEditText được thực hiện:

https://android.googlesource.com/platform/frameworks/support.git/+/master/design/src/android/support/design/widget/TextInputEditText.java

Theo đó, đây là những gì TextInputAutoCompleteTextView có thể trông như thế nào.

public class TextInputAutoCompleteTextView extends AppCompatAutoCompleteTextView { 

    public TextInputAutoCompleteTextView(Context context) { 
     super(context); 
    } 

    public TextInputAutoCompleteTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public TextInputAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
     final InputConnection ic = super.onCreateInputConnection(outAttrs); 
     if (ic != null && outAttrs.hintText == null) { 
      // If we don't have a hint and our parent is a TextInputLayout, use it's hint for the 
      // EditorInfo. This allows us to display a hint in 'extract mode'. 
      final ViewParent parent = getParent(); 
      if (parent instanceof TextInputLayout) { 
       outAttrs.hintText = ((TextInputLayout) parent).getHint(); 
      } 
     } 
     return ic; 
    } 
} 
+0

Không bao giờ quá muộn, bạn tôi! Yeah, tôi nghĩ nhiều. Tôi đoán, khi thấy TextInputEditText quá thẳng về phía trước thì nó không thực sự là vấn đề. Cám ơn phản hồi của bạn! ☺ – sindrenm

Các vấn đề liên quan