2015-07-08 16 views
11

zauważyłem jakieś dziwne zachowanie TextInputLayout:TextInputLayout nie pokazuje kiedy View dodał programowo

Kiedy dodać następujące do mojego układu:

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

wszystko działa zgodnie z oczekiwaniami.

Kiedy nadmuchać podobny układ jak:

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

TextInputLayout nie pojawia i EditText zachowuje standardowy sposób.

Jakieś pomysły, jaki mógł być powód?

enter image description here

+0

gdzie jest układ dla roota? – matty357

+0

Jest w układzie Aktywności. To jest LinearLayout, aby być precyzyjnym. – FWeigl

Odpowiedz

43

należy zmienić wskazówkę, a nie na EditText, ale na TextInputLayout. Tak będzie:

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

TextInputLayout ma swój własny parametr wskazówkę i kiedy pompowania z układu to get podpowiedź od jego dziecko EditText i ustawić na nim pusty podpowiedź.

Gdy chcesz zmienić podpowiedź programowo, musisz wywołać textInputLayout.setHint (tekst ciągły) zamiast zmieniać wskazówkę EditText

+4

Zadziwiające, jak intuicyjne jest ... –

+0

Awesome solution man. Dzięki –

+0

Dzięki, to działa dla mnie –

1

Używam tego ((FrameLayout) findViewById (R.id.framePreview)) addView (podgląd).; bez żadnych problemów, może jest to typ widoku? powinno to

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

nie być to

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

Próbowałem różne typy ViewGroup dla "root", a także przypisanie ich jawnie tak jak Ty, nie ma znaczenia. – FWeigl

+0

jest to dlatego, że dodajesz v i powinieneś dodawać editText, editText jest tam, gdzie zmieniłeś tekst – matty357

+0

Gdyby dodać tylko EditText, TextInputLayout zostałby utracony. – FWeigl