2015-07-08 12 views
11

ho notato uno strano comportamento del TextInputLayout:TextInputLayout non mostrano quando View aggiunto a livello di codice

Quando aggiungo quanto segue al mio layout:

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

tutto funziona come previsto.

Quando ho gonfiare un layout simile come:

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

il TextInputLayout non appare e il EditText si comporta il modo standard.

Qualche idea quale potrebbe essere la ragione?

enter image description here

+0

dove si trova il layout per root? – matty357

+0

È nel layout dell'attività. È un LinearLayout per essere precisi. – FWeigl

risposta

43

si dovrebbe cambiare suggerimento, non su EditText, ma su TextInputLayout. Così sarà:

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

TextInputLayout ha il proprio parametro di suggerimento e quando si gonfia dal layout si ottiene di suggerimento da bambino è EditText e impostare suggerimento vuota su di esso.

Quando si desidera modificare il suggerimento in modo programmatico, è necessario chiamare textInputLayout.setHint (testo stringa) invece di modificare l'hint di EditText

+4

Incredibile quanto sia intuitivo ... –

+0

Impressionante uomo di soluzioni. Grazie –

+0

Grazie, per me funziona –

1

Io uso questo ((FrameLayout) findViewById (R.id.framePreview)) addView (anteprima).; senza problemi, forse è il tipo di vista? dovrebbe questo

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

non essere presente

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

Ho provato diversi tipi ViewGroup per 'root' e anche assegnandoli esplicitamente come hai fatto tu, senza fare alcuna differenza. – FWeigl

+0

è perché stai aggiungendo v e dovresti aggiungere editText, editText è dove hai cambiato il testo. – matty357

+0

Se si aggiungerebbe solo EditText, il TextInputLayout andrebbe perso. – FWeigl

Problemi correlati