2015-07-08 15 views
11

tôi nhận thấy một số hành vi kỳ lạ của TextInputLayout:TextInputLayout không hiển thị khi Chế độ xem thêm lập trình

Khi tôi thêm dòng sau vào cách bố trí của tôi:

<android.support.design.widget.TextInputLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:id="@+id/txtFirstName" 
      style="@style/EditTextStyle" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:hint="In layout" 
      android:singleLine="true" /> 
    </android.support.design.widget.TextInputLayout> 

mọi thứ hoạt động như mong đợi.

Khi tôi thổi phồng một Layout tương tự như:

View v = LayoutInflater.from(this).inflate(R.layout.edittext_w_surrounding_textinputlayout, null); 
    EditText editText = (EditText) v.findViewById(R.id.editText); 
    editText.setHint("Added programmatically"); 

    ViewGroup root = (ViewGroup) findViewById(R.id.root); 
    root.addView(v); 

các TextInputLayout không xuất hiện và EditText cư xử theo tiêu chuẩn.

Bất kỳ ý tưởng nào về lý do có thể là gì?

enter image description here

+0

bố trí cho thư mục gốc ở đâu? – matty357

+0

Đó là trong bố cục của Hoạt động. Đó là LinearLayout chính xác. – FWeigl

Trả lời

43

Bạn nên thay đổi gợi ý, không phải trên EditText, nhưng trên TextInputLayout. Vì vậy, nó sẽ là:

TextInputLayout v = (TextInputLayout) LayoutInflater.from(this).inflate(R.layout.edittext_w_surrounding_textinputlayout, null); 
v.setHint("Added programmatically"); 

TextInputLayout có tham số gợi ý riêng của nó và khi bố trí nó lấy gợi ý từ con đó là EditText và đặt gợi ý trống trên đó.

Khi bạn muốn thay đổi gợi ý theo chương trình, bạn phải gọi textInputLayout.setHint (Chuỗi văn bản) thay vì thay đổi gợi ý EditText

+4

Tuyệt vời như thế nào trực quan đó là ... –

+0

Người đàn ông giải pháp tuyệt vời. Cảm ơn, –

+0

Cảm ơn, các công trình của nó dành cho tôi –

1

tôi sử dụng này ((FrameLayout) findViewById (R.id.framePreview)) addView (preview). không có vấn đề gì cả, có thể là kiểu xem của nó? nên này

ViewGroup root = (ViewGroup) findViewById(R.id.root); 
root.addView(v); 

không này

LinearLayout root = (LinearLayout) findViewById(R.id.root); 
root.addView(v); 
+0

Tôi đã thử các loại ViewGroup khác nhau cho 'root' và cũng chỉ định chúng một cách rõ ràng như bạn đã làm, không có sự khác biệt. – FWeigl

+0

là vì bạn đang thêm v và bạn nên thêm editText, editText là nơi bạn thay đổi văn bản – matty357

+0

Nếu chỉ thêm EditText, TextInputLayout sẽ bị mất. – FWeigl

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