2015-07-08 16 views
11

Ben TextInputLayout bazı garip davranış fark: beklendiği gibiTextInputLayout programlı

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

her şey çalışıyor:

Düzenime aşağıdakileri ekleyin

.

Ben benzer bir Düzeni gibi şişirmek zaman:

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 görünmez ve EditText standart şekilde davranır.

Sebep ne olabilir? .

enter image description here

+0

değişen programlama yoluyla size textInputLayout.setHint (Dize metni) aramak zorunda ipucu değiştirmek istediğinizde nereye kökü düzeni

mı? – matty357

+0

Etkinliğin düzeninde. Kesin olması için LinearLayout. – FWeigl

cevap

43

Sen EditText, aynı TextInputLayout üzerinde, ipucu değişmelidir olmamalıdır. Bu yüzden olacak:

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

TextInputLayout kendi ipucu parametre olduğunu ve düzenden şişirme zaman çocuğun EditText ve üzerinde ayarlanmış boş ipucu gelen en ipucu almak vardır. Bunun yerine EditText ipucu

+4

İnanılmaz ne kadar sezgisel ... –

+0

Harika bir çözüm adam. Teşekkürler –

+0

Teşekkürler, çalışmaları benim için –

1

bu ((FrameLayout) findViewById (R.id.framePreview)) addView (önizleme) kullanın; Hiçbir sorun olmadan, belki de onun görüş tipi? bu

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

bu

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

'Kök' için farklı ViewGroup türlerini denedim ve sizin yaptığınız gibi açıkça atayarak, hiçbir fark yaratmadım. – FWeigl

+0

çünkü siz v ekliyorsunuz ve editText ekliyor olmanız gerekiyor, editText metni değiştirdiğiniz yerdeyse – matty357

+0

Yalnızca EditText ekleyecekseniz TextInputLayout kaybolur. – FWeigl